From ad2310656299467c775738fcdbc5840bd492df8d Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:45:18 -0500 Subject: Second Life viewer sources 1.18.5.2-RC --- linden/indra/llcommon/llkeythrottle.h | 218 +++++++++++++++++++++ linden/indra/llcommon/llversionviewer.h | 2 +- linden/indra/llui/llmenugl.cpp | 1 + linden/indra/llui/llview.cpp | 1 + .../indra/newview/English.lproj/InfoPlist.strings | 4 +- linden/indra/newview/Info-SecondLife.plist | 2 +- .../indra/newview/llclassifiedstatsresponder.cpp | 18 +- linden/indra/newview/llclassifiedstatsresponder.h | 4 +- linden/indra/newview/llfloaterchat.cpp | 1 + linden/indra/newview/llfloaterdirectory.cpp | 31 --- linden/indra/newview/llfloaterdirectory.h | 2 - linden/indra/newview/llpanelclassified.cpp | 53 +++-- linden/indra/newview/llpanelclassified.h | 10 +- linden/indra/newview/llpaneldirbrowser.cpp | 1 + linden/indra/newview/llpaneldirfind.cpp | 3 + linden/indra/newview/llpanelplace.cpp | 21 +- linden/indra/newview/llpanelplace.h | 1 - linden/indra/newview/llviewermessage.cpp | 28 +++ linden/indra/newview/llwebbrowserctrl.cpp | 21 +- linden/indra/newview/llwebbrowserctrl.h | 4 + linden/indra/newview/releasenotes.txt | 12 ++ linden/indra/newview/res/newViewRes.rc | 8 +- linden/indra/newview/skins/xui/de/alerts.xml | 62 ++++-- .../indra/newview/skins/xui/de/floater_about.xml | 6 +- .../newview/skins/xui/de/floater_about_land.xml | 3 +- .../newview/skins/xui/de/floater_chat_history.xml | 9 + .../newview/skins/xui/de/floater_directory.xml | 78 ++++++-- .../newview/skins/xui/de/floater_html_help.xml | 2 +- linden/indra/newview/skins/xui/de/floater_im.xml | 3 + .../skins/xui/de/floater_instant_message.xml | 9 + .../xui/de/floater_instant_message_ad_hoc.xml | 9 + .../skins/xui/de/floater_instant_message_group.xml | 9 + .../newview/skins/xui/de/floater_lagmeter.xml | 2 +- .../newview/skins/xui/de/floater_land_holdings.xml | 9 +- .../newview/skins/xui/de/floater_report_bug.xml | 3 +- .../indra/newview/skins/xui/de/menu_inventory.xml | 2 +- linden/indra/newview/skins/xui/de/menu_viewer.xml | 10 + linden/indra/newview/skins/xui/de/notify.xml | 5 + .../skins/xui/de/panel_avatar_classified.xml | 6 + .../newview/skins/xui/de/panel_group_general.xml | 5 +- .../skins/xui/de/panel_group_land_money.xml | 11 +- .../newview/skins/xui/de/panel_group_voting.xml | 11 +- .../newview/skins/xui/de/panel_overlaybar.xml | 4 +- linden/indra/newview/skins/xui/de/panel_place.xml | 13 +- .../newview/skins/xui/de/panel_place_small.xml | 21 ++ .../skins/xui/de/panel_preferences_general.xml | 14 +- .../newview/skins/xui/de/panel_region_general.xml | 5 +- .../newview/skins/xui/de/panel_status_bar.xml | 2 + .../newview/skins/xui/de/panel_voice_options.xml | 2 +- .../newview/skins/xui/en-us/floater_directory.xml | 3 +- .../indra/newview/skins/xui/en-us/floater_html.xml | 12 +- .../newview/skins/xui/en-us/floater_lagmeter.xml | 14 +- .../newview/skins/xui/en-us/floater_my_friends.xml | 2 +- .../skins/xui/en-us/floater_report_abuse.xml | 6 +- .../newview/skins/xui/en-us/panel_group_voting.xml | 12 +- .../skins/xui/en-us/panel_region_covenant.xml | 6 +- .../newview/skins/xui/en-us/panel_region_debug.xml | 6 +- .../skins/xui/en-us/panel_region_texture.xml | 16 +- linden/indra/newview/skins/xui/ja/alerts.xml | 70 ++++--- .../indra/newview/skins/xui/ja/floater_about.xml | 10 +- .../newview/skins/xui/ja/floater_about_land.xml | 5 +- .../newview/skins/xui/ja/floater_chat_history.xml | 9 + .../newview/skins/xui/ja/floater_directory.xml | 64 +++++- .../newview/skins/xui/ja/floater_html_help.xml | 2 +- linden/indra/newview/skins/xui/ja/floater_im.xml | 3 + .../skins/xui/ja/floater_instant_message.xml | 9 + .../xui/ja/floater_instant_message_ad_hoc.xml | 9 + .../skins/xui/ja/floater_instant_message_group.xml | 9 + .../newview/skins/xui/ja/floater_lagmeter.xml | 2 +- .../newview/skins/xui/ja/floater_land_holdings.xml | 9 +- .../newview/skins/xui/ja/floater_report_bug.xml | 2 +- .../indra/newview/skins/xui/ja/floater_tools.xml | 2 +- .../indra/newview/skins/xui/ja/menu_inventory.xml | 2 +- linden/indra/newview/skins/xui/ja/menu_viewer.xml | 12 +- linden/indra/newview/skins/xui/ja/notify.xml | 5 + linden/indra/newview/skins/xui/ja/panel_avatar.xml | 2 +- .../skins/xui/ja/panel_avatar_classified.xml | 6 + .../newview/skins/xui/ja/panel_group_general.xml | 9 +- .../skins/xui/ja/panel_group_land_money.xml | 11 +- .../newview/skins/xui/ja/panel_group_notices.xml | 6 +- .../newview/skins/xui/ja/panel_group_roles.xml | 2 +- .../newview/skins/xui/ja/panel_group_voting.xml | 3 +- linden/indra/newview/skins/xui/ja/panel_place.xml | 13 +- .../newview/skins/xui/ja/panel_place_small.xml | 21 ++ .../skins/xui/ja/panel_preferences_general.xml | 14 +- .../newview/skins/xui/ja/panel_region_general.xml | 2 +- .../newview/skins/xui/ja/panel_status_bar.xml | 2 + linden/indra/newview/skins/xui/ko/alerts.xml | 72 ++++--- .../indra/newview/skins/xui/ko/floater_about.xml | 6 +- .../newview/skins/xui/ko/floater_about_land.xml | 2 +- .../newview/skins/xui/ko/floater_chat_history.xml | 9 + .../newview/skins/xui/ko/floater_directory.xml | 56 ++++++ .../newview/skins/xui/ko/floater_html_help.xml | 2 +- linden/indra/newview/skins/xui/ko/floater_im.xml | 3 + .../skins/xui/ko/floater_instant_message.xml | 9 + .../xui/ko/floater_instant_message_ad_hoc.xml | 9 + .../skins/xui/ko/floater_instant_message_group.xml | 9 + .../newview/skins/xui/ko/floater_lagmeter.xml | 2 +- .../newview/skins/xui/ko/floater_land_holdings.xml | 9 +- .../indra/newview/skins/xui/ko/menu_inventory.xml | 2 +- linden/indra/newview/skins/xui/ko/menu_viewer.xml | 9 + linden/indra/newview/skins/xui/ko/notify.xml | 5 + .../skins/xui/ko/panel_avatar_classified.xml | 6 + .../indra/newview/skins/xui/ko/panel_friends.xml | 20 +- .../newview/skins/xui/ko/panel_group_general.xml | 3 + .../skins/xui/ko/panel_group_land_money.xml | 11 +- .../newview/skins/xui/ko/panel_group_voting.xml | 2 +- .../newview/skins/xui/ko/panel_overlaybar.xml | 2 +- linden/indra/newview/skins/xui/ko/panel_place.xml | 13 +- .../newview/skins/xui/ko/panel_place_small.xml | 21 ++ .../skins/xui/ko/panel_preferences_general.xml | 14 +- .../newview/skins/xui/ko/panel_region_general.xml | 2 +- .../newview/skins/xui/ko/panel_status_bar.xml | 2 + .../newview/skins/xui/ko/panel_voice_options.xml | 2 +- linden/libraries/include/llmozlib.h | 4 + 115 files changed, 1149 insertions(+), 310 deletions(-) create mode 100644 linden/indra/llcommon/llkeythrottle.h (limited to 'linden') diff --git a/linden/indra/llcommon/llkeythrottle.h b/linden/indra/llcommon/llkeythrottle.h new file mode 100644 index 0000000..ded9e17 --- /dev/null +++ b/linden/indra/llcommon/llkeythrottle.h @@ -0,0 +1,218 @@ +/** + * @file llkeythrottle.h + * @brief LLKeyThrottle class definition + * + * $LicenseInfo:firstyear=2005&license=internal$ + * + * Copyright (c) 2005-2007, Linden Research, Inc. + * + * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of + * this source code is governed by the Linden Lab Source Code Disclosure + * Agreement ("Agreement") previously entered between you and Linden + * Lab. By accessing, using, copying, modifying or distributing this + * software, you acknowledge that you have been informed of your + * obligations under the Agreement 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_LLKEY_THROTTLE_H +#define LL_LLKEY_THROTTLE_H + +// LLKeyThrottle keeps track of the number of action occurences with a key value +// for a type over a given time period. If the rate set in the constructor is +// exceeed, the key is considered blocked. The transition from unblocked to +// blocked is noted so the responsible agent can be informed. This transition +// takes twice the look back window to clear. + +#include "linden_common.h" + +#include "llframetimer.h" +#include + + +// Implementation utility class - use LLKeyThrottle, not this +template +class LLKeyThrottleImpl +{ +public: + struct Entry { + U32 count; + BOOL blocked; + + Entry() : count(0), blocked(FALSE) { } + }; + + typedef std::map EntryMap; + + EntryMap * prevMap; + EntryMap * currMap; + + U32 countLimit; + // maximum number of keys allowed per interval + + U64 interval_usec; + // each map covers this time period + U64 start_usec; + // currMap started counting at this time + // prevMap covers the previous interval + + LLKeyThrottleImpl() : prevMap(0), currMap(0) { } + + static U64 getTime() + { + return LLFrameTimer::getTotalTime(); + } +}; + + +template< class T > +class LLKeyThrottle +{ +public: + LLKeyThrottle(U32 limit, F32 interval) + : m(* new LLKeyThrottleImpl) + { + // limit is the maximum number of keys + // allowed per interval (in seconds) + m.countLimit = limit; + m.interval_usec = (U64)(interval * USEC_PER_SEC); + m.start_usec = LLKeyThrottleImpl::getTime(); + + m.prevMap = new typename LLKeyThrottleImpl::EntryMap; + m.currMap = new typename LLKeyThrottleImpl::EntryMap; + } + + ~LLKeyThrottle() + { + delete m.prevMap; + delete m.currMap; + delete &m; + } + + enum State { + THROTTLE_OK, // rate not exceeded, let pass + THROTTLE_NEWLY_BLOCKED, // rate exceed for the first time + THROTTLE_BLOCKED, // rate exceed, block key + }; + + // call each time the key wants use + State noteAction(const T& id, S32 weight = 1) + { + U64 now = LLKeyThrottleImpl::getTime(); + + if (now >= (m.start_usec + m.interval_usec)) + { + if (now < (m.start_usec + 2 * m.interval_usec)) + { + // prune old data + delete m.prevMap; + m.prevMap = m.currMap; + m.currMap = new typename LLKeyThrottleImpl::EntryMap; + + m.start_usec += m.interval_usec; + } + else + { + // lots of time has passed, all data is stale + delete m.prevMap; + delete m.currMap; + m.prevMap = new typename LLKeyThrottleImpl::EntryMap; + m.currMap = new typename LLKeyThrottleImpl::EntryMap; + + m.start_usec = now; + } + } + + U32 prevCount = 0; + BOOL prevBlocked = FALSE; + + typename LLKeyThrottleImpl::EntryMap::const_iterator prev = m.prevMap->find(id); + if (prev != m.prevMap->end()) + { + prevCount = prev->second.count; + prevBlocked = prev->second.blocked; + } + + typename LLKeyThrottleImpl::Entry& curr = (*m.currMap)[id]; + + bool wereBlocked = curr.blocked || prevBlocked; + + curr.count += weight; + + // curr.count is the number of keys in + // this current 'time slice' from the beginning of it until now + // prevCount is the number of keys in the previous + // time slice scaled to be one full time slice back from the current + // (now) time. + + // compute current, windowed rate + F64 timeInCurrent = ((F64)(now - m.start_usec) / m.interval_usec); + F64 averageCount = curr.count + prevCount * (1.0 - timeInCurrent); + + curr.blocked |= averageCount > m.countLimit; + + bool nowBlocked = curr.blocked || prevBlocked; + + if (!nowBlocked) + { + return THROTTLE_OK; + } + else if (!wereBlocked) + { + return THROTTLE_NEWLY_BLOCKED; + } + else + { + return THROTTLE_BLOCKED; + } + } + + // call to force throttle conditions for id + void throttleAction(const T& id) + { + noteAction(id); + typename LLKeyThrottleImpl::Entry& curr = (*m.currMap)[id]; + if (curr.count < m.countLimit) + { + curr.count = m.countLimit; + } + curr.blocked = TRUE; + } + + // returns TRUE if key is blocked + BOOL isThrottled(const T& id) const + { + if (m.currMap->empty() + && m.prevMap->empty()) + { + // most of the time we'll fall in here + return FALSE; + } + + // NOTE, we ignore the case where id is in the map but the map is stale. + // You might think that we'd stop throttling things in such a case, + // however it may be that a god has disabled scripts in the region or + // estate --> we probably want to report the state of the id when the + // scripting engine was paused. + typename LLKeyThrottleImpl::EntryMap::const_iterator entry = m.currMap->find(id); + if (entry != m.currMap->end()) + { + return entry->second.blocked; + } + entry = m.prevMap->find(id); + if (entry != m.prevMap->end()) + { + return entry->second.blocked; + } + return FALSE; + } + +protected: + LLKeyThrottleImpl& m; +}; + +#endif diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h index e3a4df1..e24c38b 100644 --- a/linden/indra/llcommon/llversionviewer.h +++ b/linden/indra/llcommon/llversionviewer.h @@ -35,7 +35,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 18; const S32 LL_VERSION_PATCH = 5; -const S32 LL_VERSION_BUILD = 1; +const S32 LL_VERSION_BUILD = 2; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp index 8ec5656..d150f89 100644 --- a/linden/indra/llui/llmenugl.cpp +++ b/linden/indra/llui/llmenugl.cpp @@ -1421,6 +1421,7 @@ void LLMenuItemBranchGL::onVisibilityChange( BOOL new_visibility ) { mBranch->setVisible(FALSE); } + LLMenuItemGL::onVisibilityChange(new_visibility); } BOOL LLMenuItemBranchGL::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ) diff --git a/linden/indra/llui/llview.cpp b/linden/indra/llui/llview.cpp index ef91d9c..9442a5c 100644 --- a/linden/indra/llui/llview.cpp +++ b/linden/indra/llui/llview.cpp @@ -791,6 +791,7 @@ BOOL LLView::setLabelArg(const LLString& key, const LLStringExplicit& text) return FALSE; } +// virtual void LLView::onVisibilityChange ( BOOL new_visibility ) { for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings index a25f977..9dfdda9 100644 --- a/linden/indra/newview/English.lproj/InfoPlist.strings +++ b/linden/indra/newview/English.lproj/InfoPlist.strings @@ -1,5 +1,5 @@ /* Localized versions of Info.plist keys */ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 1.18.5.1"; -CFBundleGetInfoString = "Second Life version 1.18.5.1, Copyright 2004-2007 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 1.18.5.2"; +CFBundleGetInfoString = "Second Life version 1.18.5.2, Copyright 2004-2007 Linden Research, Inc."; diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist index 2c9f58a..fac66b8 100644 --- a/linden/indra/newview/Info-SecondLife.plist +++ b/linden/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ CFBundleVersion - 1.18.5.1 + 1.18.5.2 CSResourcesFileMapped diff --git a/linden/indra/newview/llclassifiedstatsresponder.cpp b/linden/indra/newview/llclassifiedstatsresponder.cpp index 00b1878..d44f2cc 100644 --- a/linden/indra/newview/llclassifiedstatsresponder.cpp +++ b/linden/indra/newview/llclassifiedstatsresponder.cpp @@ -32,14 +32,14 @@ #include "llview.h" #include "message.h" -LLClassifiedStatsResponder::LLClassifiedStatsResponder(LLViewHandle classified_panel_handle) -: mClassifiedPanelHandle(classified_panel_handle) +LLClassifiedStatsResponder::LLClassifiedStatsResponder(LLViewHandle classified_panel_handle, LLUUID classified_id) +: mClassifiedPanelHandle(classified_panel_handle), +mClassifiedID(classified_id) { } /*virtual*/ void LLClassifiedStatsResponder::result(const LLSD& content) { - LLUUID classified_id = content["classified_id"]; S32 teleport = content["teleport_clicks"].asInteger(); S32 map = content["map_clicks"].asInteger(); S32 profile = content["profile_clicks"].asInteger(); @@ -47,16 +47,15 @@ void LLClassifiedStatsResponder::result(const LLSD& content) S32 search_map = content["search_map_clicks"].asInteger(); S32 search_profile = content["search_profile_clicks"].asInteger(); - std::string msg = llformat("Clicks: %d teleport, %d map, %d profile", - teleport + search_teleport, - map + search_map, - profile + search_profile); - LLPanelClassified* classified_panelp = (LLPanelClassified*)LLPanel::getPanelByHandle(mClassifiedPanelHandle); if(classified_panelp) { - classified_panelp->setClickThroughText(msg); + classified_panelp->setClickThrough(mClassifiedID, + teleport + search_teleport, + map + search_map, + profile + search_profile, + true); } } @@ -68,3 +67,4 @@ void LLClassifiedStatsResponder::error(U32 status, const std::string& reason) << status << ": " << reason << ")" << llendl; } + diff --git a/linden/indra/newview/llclassifiedstatsresponder.h b/linden/indra/newview/llclassifiedstatsresponder.h index c3eddbe..25579be 100644 --- a/linden/indra/newview/llclassifiedstatsresponder.h +++ b/linden/indra/newview/llclassifiedstatsresponder.h @@ -24,11 +24,12 @@ #include "llhttpclient.h" #include "llview.h" +#include "lluuid.h" class LLClassifiedStatsResponder : public LLHTTPClient::Responder { public: - LLClassifiedStatsResponder(LLViewHandle classified_panel_handle); + LLClassifiedStatsResponder(LLViewHandle classified_panel_handle, LLUUID classified_id); //If we get back a normal response, handle it here virtual void result(const LLSD& content); //If we get back an error (not found, etc...), handle it here @@ -36,6 +37,7 @@ public: protected: LLViewHandle mClassifiedPanelHandle; + LLUUID mClassifiedID; }; #endif // LL_LLCLASSIFIEDSTATSRESPONDER_H diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp index b435ada..5fdbf7d 100644 --- a/linden/indra/newview/llfloaterchat.cpp +++ b/linden/indra/newview/llfloaterchat.cpp @@ -164,6 +164,7 @@ void LLFloaterChat::onVisibilityChange(BOOL new_visibility) { // Hide the chat overlay when our history is visible. gConsole->setVisible( !new_visibility ); + LLFloater::onVisibilityChange(new_visibility); } diff --git a/linden/indra/newview/llfloaterdirectory.cpp b/linden/indra/newview/llfloaterdirectory.cpp index f386f5b..1693532 100644 --- a/linden/indra/newview/llfloaterdirectory.cpp +++ b/linden/indra/newview/llfloaterdirectory.cpp @@ -470,37 +470,6 @@ void LLFloaterDirectory::setVisible(BOOL visible) LLFloater::setVisible(visible); } -// virtual -void LLFloaterDirectory::setMinimized(BOOL b) -{ - mMinimizing = true; - LLFloater::setMinimized(b); - mMinimizing = false; -} - -// virtual -void LLFloaterDirectory::reshape(S32 width, S32 height, BOOL called_from_parent) -{ - // HACK: If the window (screen window) is made too small, the search floater - // will get resized below its minimum size, resulting in buttons hanging off - // the edge. So we need to limit reshape size. - // BUT: Minimizing the window is considered a resize. - // Remove this code when DEV-5670 is fixed ("Sanitize floater sizing behavior - // when SL window is made very small"). JC - if (!mMinimizing) - { - if (width < getMinWidth()) - { - width = getMinWidth(); - } - if (height < getMinHeight()) - { - height = getMinHeight(); - } - } - LLFloater::reshape(width, height, called_from_parent); -} - void LLFloaterDirectory::onClose(bool app_quitting) { setVisible(FALSE); diff --git a/linden/indra/newview/llfloaterdirectory.h b/linden/indra/newview/llfloaterdirectory.h index d973f86..4b0d81e 100644 --- a/linden/indra/newview/llfloaterdirectory.h +++ b/linden/indra/newview/llfloaterdirectory.h @@ -62,8 +62,6 @@ public: /*virtual*/ ~LLFloaterDirectory(); /*virtual*/ void setVisible(BOOL visible); - /*virtual*/ void setMinimized(BOOL minimize); - /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent); // Used for toggling God mode, which changes to visibility of // some picks. diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp index cb75f16..e0f750f 100644 --- a/linden/indra/newview/llpanelclassified.cpp +++ b/linden/indra/newview/llpanelclassified.cpp @@ -91,7 +91,8 @@ public: S32 profile_clicks = atoi(strings[3].c_str()); LLPanelClassified::setClickThrough(classified_id, teleport_clicks, map_clicks, - profile_clicks); + profile_clicks, + false); return true; } }; @@ -127,7 +128,14 @@ LLPanelClassified::LLPanelClassified(BOOL in_finder, bool from_search) mProfileBtn(NULL), mInfoText(NULL), mSetBtn(NULL), - mClickThroughText(NULL) + mClickThroughText(NULL), + mTeleportClicksOld(0), + mMapClicksOld(0), + mProfileClicksOld(0), + mTeleportClicksNew(0), + mMapClicksNew(0), + mProfileClicksNew(0) + { sAllPanels.push_back(this); @@ -368,16 +376,12 @@ void LLPanelClassified::setClassifiedID(const LLUUID& id) mClassifiedID = id; } -void LLPanelClassified::setClickThroughText(const std::string& text) -{ - if(mClickThroughText) - this->mClickThroughText->setText(text); -} //static void LLPanelClassified::setClickThrough(const LLUUID& classified_id, S32 teleport, S32 map, - S32 profile) + S32 profile, + bool from_new_table) { for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter) { @@ -388,22 +392,29 @@ void LLPanelClassified::setClickThrough(const LLUUID& classified_id, continue; } - // We need to see if we should use the new stat table or the old. - // If the SearchStatRequest capability exists, then the data will come - // from the new table. - std::string url = gAgent.getRegion()->getCapability("SearchStatRequest"); + // We need to check to see if the data came from the new stat_table + // or the old classified table. We also need to cache the data from + // the two separate sources so as to display the aggregate totals. - if (!url.empty()) + if (from_new_table) { - return; + self->mTeleportClicksNew = teleport; + self->mMapClicksNew = map; + self->mProfileClicksNew = profile; + } + else + { + self->mTeleportClicksOld = teleport; + self->mMapClicksOld = map; + self->mProfileClicksOld = profile; } if (self->mClickThroughText) { std::string msg = llformat("Clicks: %d teleport, %d map, %d profile", - teleport, - map, - profile); + self->mTeleportClicksNew + self->mTeleportClicksOld, + self->mMapClicksNew + self->mMapClicksOld, + self->mProfileClicksNew + self->mProfileClicksOld); self->mClickThroughText->setText(msg); } } @@ -449,7 +460,7 @@ void LLPanelClassified::sendClassifiedInfoRequest() if (!url.empty()) { llinfos << "Classified stat request via capability" << llendl; - LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(this->getHandle())); + LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(this->getHandle(), mClassifiedID)); } } } @@ -929,7 +940,6 @@ void LLPanelClassified::sendClassifiedClickMessage(const char* type) strings.push_back(mClassifiedID.asString()); strings.push_back(type); LLUUID no_invoice; - send_generic_message("classifiedclick", strings, no_invoice); // New classified click-through handling LLSD body; @@ -938,11 +948,16 @@ void LLPanelClassified::sendClassifiedClickMessage(const char* type) body["classified_id"] = mClassifiedID; std::string url = gAgent.getRegion()->getCapability("SearchStatTracking"); + // If the capability exists send to the new database, otherwise send to the old one. if (!url.empty()) { llinfos << "LLPanelClassified::sendClassifiedClickMessage via capability" << llendl; LLHTTPClient::post(url, body, new LLHTTPClient::Responder()); } + else + { + send_generic_message("classifiedclick", strings, no_invoice); + } } //////////////////////////////////////////////////////////////////////////////////////////// diff --git a/linden/indra/newview/llpanelclassified.h b/linden/indra/newview/llpanelclassified.h index 6ebac4c..a2bb29b 100644 --- a/linden/indra/newview/llpanelclassified.h +++ b/linden/indra/newview/llpanelclassified.h @@ -81,7 +81,7 @@ public: void setClassifiedID(const LLUUID& id); void setClickThroughText(const std::string& text); static void setClickThrough(const LLUUID& classified_id, - S32 teleport, S32 map, S32 profile); + S32 teleport, S32 map, S32 profile, bool from_new_table); // check that the title is valid (E.G. starts with a number or letter) BOOL titleIsValid(); @@ -129,6 +129,14 @@ protected: LLUUID mParcelID; S32 mPriceForListing; + // Needed for stat tracking + S32 mTeleportClicksOld; + S32 mMapClicksOld; + S32 mProfileClicksOld; + S32 mTeleportClicksNew; + S32 mMapClicksNew; + S32 mProfileClicksNew; + // Data will be requested on first draw BOOL mDataRequested; diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp index c4e33cb..27fb3ac 100644 --- a/linden/indra/newview/llpaneldirbrowser.cpp +++ b/linden/indra/newview/llpaneldirbrowser.cpp @@ -1247,6 +1247,7 @@ void LLPanelDirBrowser::onVisibilityChange(BOOL new_visibility) { onCommitList(NULL, this); } + LLPanel::onVisibilityChange(new_visibility); } S32 LLPanelDirBrowser::showNextButton(S32 rows) diff --git a/linden/indra/newview/llpaneldirfind.cpp b/linden/indra/newview/llpaneldirfind.cpp index 24db19f..591f06d 100644 --- a/linden/indra/newview/llpaneldirfind.cpp +++ b/linden/indra/newview/llpaneldirfind.cpp @@ -137,6 +137,9 @@ BOOL LLPanelDirFindAll::postBuild() mWebBrowser->setOpenInInternalBrowser( false ); mWebBrowser->setOpenInExternalBrowser( false ); + // redirect 404 pages from S3 somewhere else + mWebBrowser->set404RedirectUrl( childGetText("redirect_404_url") ); + // Track updates for progress display. mWebBrowser->addObserver(this); diff --git a/linden/indra/newview/llpanelplace.cpp b/linden/indra/newview/llpanelplace.cpp index d08d25e..8825ce7 100644 --- a/linden/indra/newview/llpanelplace.cpp +++ b/linden/indra/newview/llpanelplace.cpp @@ -89,6 +89,9 @@ BOOL LLPanelPlace::postBuild() mSnapshotCtrl->setEnabled(FALSE); mNameEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "name_editor"); + // Text boxes appear to have a " " in them by default. This breaks the + // emptiness test for filling in data from the network. Slam to empty. + mNameEditor->setText( LLString::null ); mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor"); @@ -141,6 +144,10 @@ void LLPanelPlace::resetLocation() mPosGlobal.clearVec(); mPosRegion.clearVec(); mAuctionID = 0; + mNameEditor->setText( LLString::null ); + mDescEditor->setText( LLString::null ); + mInfoEditor->setText( LLString::null ); + mLocationEditor->setText( LLString::null ); } void LLPanelPlace::setParcelID(const LLUUID& parcel_id) @@ -154,10 +161,6 @@ void LLPanelPlace::setSnapshot(const LLUUID& snapshot_id) mSnapshotCtrl->setImageAssetID(snapshot_id); } -void LLPanelPlace::setName(const std::string& name) -{ - mNameEditor->setText(name); -} void LLPanelPlace::setLocationString(const std::string& location) { @@ -256,11 +259,17 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) std::string name_str(name); std::string desc_str(desc); - if(! name_str.empty() && ! self->mNameEditor->getText().empty()) + if( !name_str.empty() + && self->mNameEditor->getText().empty()) + { self->mNameEditor->setText(name_str); + } - if(! desc_str.empty() && ! self->mDescEditor->getText().empty()) + if( !desc_str.empty() + && self->mDescEditor->getText().empty()) + { self->mDescEditor->setText(desc_str); + } LLString info_text; LLUIString traffic = self->getUIString("traffic_text"); diff --git a/linden/indra/newview/llpanelplace.h b/linden/indra/newview/llpanelplace.h index e7c17cf..c473900 100644 --- a/linden/indra/newview/llpanelplace.h +++ b/linden/indra/newview/llpanelplace.h @@ -64,7 +64,6 @@ public: void displayItemInfo(const LLInventoryItem* pItem); void setRegionID(const LLUUID& region_id) { mRegionID = region_id; } void setSnapshot(const LLUUID& snapshot_id); - void setName(const std::string& name); void setLocationString(const std::string& location); void setErrorStatus(U32 status, const std::string& reason); diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index bd959b9..c337044 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -131,6 +131,7 @@ #include "pipeline.h" #include "viewer.h" #include "llfloaterworldmap.h" +#include "llkeythrottle.h" #include @@ -144,6 +145,12 @@ const F32 BIRD_AUDIBLE_RADIUS = 32.0f; const F32 SIT_DISTANCE_FROM_TARGET = 0.25f; static const F32 LOGOUT_REPLY_TIME = 3.f; // Wait this long after LogoutReply before quitting. + +// Determine how quickly residents' scripts can issue question dialogs +// Allow bursts of up to 5 dialogs in 10 seconds. 10*2=20 seconds recovery if throttle kicks in +static const U32 LLREQUEST_PERMISSION_THROTTLE_LIMIT = 5; // requests +static const F32 LLREQUEST_PERMISSION_THROTTLE_INTERVAL = 10.0f; // seconds + extern BOOL gDebugClicks; extern void bad_network_handler(); @@ -4448,6 +4455,27 @@ void process_script_question(LLMessageSystem *msg, void **user_data) // don't display permission requests if this object is muted - JS. if (gMuteListp->isMuted(taskid)) return; + // throttle excessive requests from any specific user's scripts + LLString throttle_owner_name = owner_name; + typedef LLKeyThrottle LLStringThrottle; + static LLStringThrottle question_throttle( LLREQUEST_PERMISSION_THROTTLE_LIMIT, LLREQUEST_PERMISSION_THROTTLE_INTERVAL ); + + switch (question_throttle.noteAction(throttle_owner_name)) + { + case LLStringThrottle::THROTTLE_NEWLY_BLOCKED: + llinfos << "process_script_question throttled" + << " owner_name:" << owner_name + << llendl; + // Fall through + + case LLStringThrottle::THROTTLE_BLOCKED: + // Escape altogether until we recover + return; + + case LLStringThrottle::THROTTLE_OK: + break; + } + LLString script_question; if (questions) { diff --git a/linden/indra/newview/llwebbrowserctrl.cpp b/linden/indra/newview/llwebbrowserctrl.cpp index ca03f48..879d229 100644 --- a/linden/indra/newview/llwebbrowserctrl.cpp +++ b/linden/indra/newview/llwebbrowserctrl.cpp @@ -183,7 +183,7 @@ BOOL LLWebBrowserCtrl::handleScrollWheel( S32 x, S32 y, S32 clicks ) // note: this isn't really necessary right now since the page is updated // on a timer but if that becomes too burdensome and the page is only updated - // once after load then this will be nexessary + // once after load then this will be necessary LLMozLib::getInstance()->grabBrowserWindow( mEmbeddedBrowserWindowId ); return TRUE; @@ -314,7 +314,8 @@ void LLWebBrowserCtrl::onVisibilityChange ( BOOL new_visibility ) else { mFrequentUpdates = false; - }; + } + LLUICtrl::onVisibilityChange(new_visibility); } //////////////////////////////////////////////////////////////////////////////// @@ -362,6 +363,20 @@ bool LLWebBrowserCtrl::canNavigateForward() //////////////////////////////////////////////////////////////////////////////// // +bool LLWebBrowserCtrl::set404RedirectUrl( std::string redirect_url ) +{ + return LLMozLib::getInstance()->set404RedirectUrl( mEmbeddedBrowserWindowId, redirect_url ); +} + +//////////////////////////////////////////////////////////////////////////////// +// +bool LLWebBrowserCtrl::clr404RedirectUrl() +{ + return LLMozLib::getInstance()->clr404RedirectUrl( mEmbeddedBrowserWindowId ); +} + +//////////////////////////////////////////////////////////////////////////////// +// void LLWebBrowserCtrl::navigateTo( std::string urlIn ) { const std::string protocol( "secondlife://" ); @@ -420,7 +435,7 @@ void LLWebBrowserCtrl::draw() return; // NOTE: optimization needed here - probably only need to do this once - // unless tearoffs change the parent which they problably do. + // unless tearoffs change the parent which they probably do. LLUICtrl* ptr = (LLUICtrl*)findRootMostFocusRoot(); if ( ptr && ptr->hasFocus() ) { diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h index ec3ddfd..8b19a23 100644 --- a/linden/indra/newview/llwebbrowserctrl.h +++ b/linden/indra/newview/llwebbrowserctrl.h @@ -197,6 +197,10 @@ class LLWebBrowserCtrl : void setHomePageUrl( const std::string urlIn ); std::string getHomePageUrl(); + // set/clear URL to visit when a 404 page is reached + bool set404RedirectUrl( std::string redirect_url ); + bool clr404RedirectUrl(); + // accessor/mutator for flag that indicates if frequent updates to texture happen bool getFrequentUpdates() { return mFrequentUpdates; }; void setFrequentUpdates( bool frequentUpdatesIn ) { mFrequentUpdates = frequentUpdatesIn; }; diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt index 9817d7f..d98a14c 100644 --- a/linden/indra/newview/releasenotes.txt +++ b/linden/indra/newview/releasenotes.txt @@ -1,3 +1,15 @@ +Release Notes for Second Life 1.18.5(2) November 21, 2007 +===================================== +Changes: +* Permissions request dialogue boxes are now throttled to prevent griefing +* Additional localization work on xml files for Japanese, Korean, and German. + +Bug fixes: +* Fixed various XML errors related to the search feature, Windows & Linux only +* Fixed VWR-3064: Land Search does not show Description Text for any parcel selected in Search +* Fixed VWR-3084: Dramatic drop in frame rate after the first use of the new search engine. +* Fixed VWR-3200: Classifieds Statistics in profile are broken + Release Notes for Second Life 1.18.5(1) November 16, 2007 ===================================== Changes: diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc index 7f45e83..fe21ed9 100644 --- a/linden/indra/newview/res/newViewRes.rc +++ b/linden/indra/newview/res/newViewRes.rc @@ -228,8 +228,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,18,5,1 - PRODUCTVERSION 1,18,5,1 + FILEVERSION 1,18,5,2 + PRODUCTVERSION 1,18,5,2 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -246,12 +246,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "1.18.5.1" + VALUE "FileVersion", "1.18.5.2" VALUE "InternalName", "Second Life" VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc." VALUE "OriginalFilename", "SecondLife.exe" VALUE "ProductName", "Second Life" - VALUE "ProductVersion", "1.18.5.1" + VALUE "ProductVersion", "1.18.5.2" END END BLOCK "VarFileInfo" diff --git a/linden/indra/newview/skins/xui/de/alerts.xml b/linden/indra/newview/skins/xui/de/alerts.xml index 5476b354..2e23ade 100644 --- a/linden/indra/newview/skins/xui/de/alerts.xml +++ b/linden/indra/newview/skins/xui/de/alerts.xml @@ -1,5 +1,11 @@ + + Nicht mehr anzeigen + + + Diese Option immer auswählen + [ALERT_NAME] fehlt in alerts.xml! @@ -322,7 +328,7 @@ einer Region befindet, die das verbietet. - In Suche veröffentlichen + In Suche anzeigen @@ -686,12 +692,15 @@ Möchten Sie auf www.secondlife.com ein Konto anlegen? - Anzeigen erscheinen eine Woche lang im Abschnitt 'Anzeigen' des Suchverzeichnisses. + Anzeigen erscheinen eine Woche lang auf der Registerkarte 'Anzeigen' +im Suchverzeichnis. -Füllen Sie Ihre Anzeige aus und klicken Sie auf 'Veröffentlichen...', um sie zum Verzeichnis hinzuzufügen. +Füllen Sie Ihre Anzeige aus und klicken Sie auf 'Veröffentlichen...', um sie zum +Verzeichnis hinzuzufügen. Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf 'Veröffentlichen' klicken. -Wenn Sie mehr bezahlen, erscheint Ihre Anzeige weiter oben in der Liste, ebenso wenn ein Benutzer nach Ihren Suchbegriffen sucht. +Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, +erscheint Ihre Anzeige weiter oben in der Liste. + + + Möchten Sie sich wirklich teleportieren? + + + Beim Teleportieren von einer Landmarke im Inventar + + + + Es gibt Probleme beim Hinzufügen eines neuen Grundstücksverwalters. Bei mindestens einem Grundstück ist die Verwalterliste voll. @@ -1204,10 +1227,10 @@ Standard: aus Die Parzellen auf diesem Grundstück können über eigene Voice- - Channel verfügen, die es Einwohnern ermöglichen, sich mit - anderen Personen in der Nähe zu unterhalten. +Channel verfügen, die es Einwohnern ermöglichen, sich mit +anderen Personen in der Nähe zu unterhalten. - Standard: aus +Standard: aus @@ -3793,7 +3816,7 @@ die im Regler definierte Position festzulegen und die Animation auszuschalten. Aktivieren Sie diese Option, um Einwohnern den Zugang zu diesem Grundstück zu - erlauben, ohne auf der Zugangsliste zu stehen. +erlauben, ohne auf der Zugangsliste zu stehen. Standard: ein @@ -3810,17 +3833,17 @@ Standard: aus Der Zugang zu diesem Grundstück wird auf die hier - aufgeführten Einwohner und Gruppen beschränkt. Diese Einstellung ist - nur verfügbar, wenn 'Vom Festland aus sichtbar' - deaktiviert ist. +aufgeführten Einwohner und Gruppen beschränkt. Diese Einstellung ist +nur verfügbar, wenn 'Vom Festland aus sichtbar' +deaktiviert ist. Der Zugang zu diesem Grundstück wird auf die hier - aufgeführten Einwohner und Gruppen beschränkt. Diese Einstellung ist - nur verfügbar, wenn 'Vom Festland aus sichtbar' - deaktiviert ist. +aufgeführten Einwohner und Gruppen beschränkt. Diese Einstellung ist +nur verfügbar, wenn 'Vom Festland aus sichtbar' +deaktiviert ist. @@ -4398,10 +4421,15 @@ wirklich permanent löschen? Second Life kann den folgenden Link nicht verarbeiten: - [SLURL] - Die meisten Links ähneln dem Folgenden: secondlife://app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about -Bitte überprüfen Sie die Schreibweise und versuchen Sie es erneut. +[SLURL] + +Die meisten Links ähneln dem Folgenden: + +secondlife:///app/agent/0e346d8b-4433-4d66-a6b0- +fd37083abc4c/about + +Ãœberprüfen Sie die Schreibweise und versuchen Sie es erneut. diff --git a/linden/indra/newview/skins/xui/de/floater_about.xml b/linden/indra/newview/skins/xui/de/floater_about.xml index 468f1b9..f05a7d5 100644 --- a/linden/indra/newview/skins/xui/de/floater_about.xml +++ b/linden/indra/newview/skins/xui/de/floater_about.xml @@ -1,11 +1,11 @@ - Second Life wird Ihnen präsentiert von Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW, Spike, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy, Greg, Rob, Brad, Chris, Eric, Palmer, Asi, Katja, Lisa, Minda, Jen, Aaron, Bryan, Mark, Jonathan, Jamie, Laurel, William, Matthew, Steve, David, Remy, James, Tim, Lee, Brian, Ashlei, Sam, Mike, Ethan, Austin, Wanda, Paul, Brian, Rachel, Valentyn, Emma Williams, Autum, Steven, Laley, Charles, Jessica, Sue, Gillian, CG, Kip, Kristen, Shamiran, Blake, Brett, Erica, Kent, Joel, Plexus, Twilight, Joppa und vielen anderen. + Second Life wird Ihnen präsentiert von Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW, Spike, Tofu, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy, Greg, Rob, Brad, Chris, Eric, Palmer, Asi, Katja, Lisa, Minda, Jen, Aaron, Bryan, Mark, Jonathan, Jamie, Laurel, William, Matthew, Steve, David, Remy, James, Tim, Lee, Brian, Ashlei, Sam, Mike, Ethan, Austin, Wanda, Paul, Brian, Rachel, Valentyn, Emma Williams, Autum, Steven, Laley, Charles, Jessica, Sue, Gillian, CG, Kip, Kristen, Shamiran, Blake, Brett, Erica, Kent, Joel, Plexus, Twilight, Joppa und vielen anderen. Im Gedenken an Jesse Malthus. Du wirst allen in Erinnerung bleiben, die deine Stimme hören durften. -Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: Aces Spade, Adrian Buckler, Adrienne LeShelle, Amanda Ascot, AnnaQuay Heart, Aquamina Khalifa, Arienne Anatine, Aston Hildyard, Ayami Kamachi, Badinage Odets, Biffy Berjis, Bigfox Pye, BigJohn Jade, BigRick Byrd, Brettus Tripsa, Brock Fitzgerald, Broker Allen, Browse by Name, Chiria Celt, Christopher Prudhomme, dale Cao, dale Lynch, Dante Tucker, DaQbet Kish, Dargon Pacer, Darius Antonelli, Deira Llanfair, DeviantBone Xi, Dore Dorado, Englishwob Etchegaray, Enya Masala, Eric Renneville, Fairfax Michinaga, FireFox Bancroft, FOXI Cortes, Frederick Earp, Geo Meek, Gotthilf Fischer, Hallo Loon, Hawk Carter, Hazel Kyrgyz, Hecter Barbosa, Hex Link, Ice Pak, Ideasu Mukerji, Itoku Kamachi, Jared Halleck, Jaykob Carter, Jennifer Drumheller, JensMartin Tomsen, JIAB Boa, Jim Gustafson, JimmyJet Fossett, Joseph Rustamova, Jt Volos, Karilyn Kidomen, Kaysha Sion, Keaton Nacon, Kevin Susenko, Khashai Steinbeck, Kira Cuddihy, Kit Massiel, Kojo Dixon, KUieTSToRm Lightcloud, Kwai Kyong, Kyrtis Daehlie, LazyGunGuy Bartlett, Lewcas Zapedzki, Lioc Cioc, LLIB Utu, Lou Liebknecht, Luca Draken, Maci Homewood, Major Sewell, Mari Todriya, MarieElize Noel, matt27 Churchill, Maverick Miasma, maydaysos Young, Mediaho Ball, Mikayla Gillespie, Mike Faulkland, Modfire Milland, MollyBrown Foxley, Mosley Jewell, Nuahs Zapedzki, Nyx Divine, Panther Farber, Paul Bumi, PrincessNina Prefect, Prio Serpentine, Rainbow Drake, Randall Rall, Randy Kazan, Reinhart Mokeev, Rhyph Somme, Rico Roizman, Ruge Dryke, Ryan Orbit, Safira Rosher, Samantha Bainbridge, Sammy Foxley, Sash Furst, Saturn Ariantho, Sienna Summers, Skye Enoch, Sofie Kanno, Solar Legion, Sonic Oki, Sunra Saenz, Taina Heart, Taryn Sprawl, tenerife Wei, TomDragon Nilsson, Trebla Reve, Trouble Carnell, user1cat Orbit, Vance Merlin, Veritas Variscan, Web Page, Wi3g3ht3s Ihnen, WinDrftr DeFarge, Yuu Nakamichi, Zac Delec, Zed Fairweather, Zimmo Hallard. +Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: Aces Spade, Adrian Buckler, Adrienne LeShelle, Amanda Ascot, AnnaQuay Heart, Aquamina Khalifa, Arienne Anatine, Aston Hildyard, Ayami Kamachi, Badinage Odets, Biffy Berjis, Bigfox Pye, BigJohn Jade, BigRick Byrd, Brettus Tripsa, Brock Fitzgerald, Broker Allen, Browse by Name, Chiria Celt, Christopher Prudhomme, dale Cao, dale Lynch, Dante Tucker, DaQbet Kish, Dargon Pacer, Darius Antonelli, Deira Llanfair, DeviantBone Xi, Dore Dorado, Englishwob Etchegaray, Enya Masala, Eric Renneville, Fairfax Michinaga, FireFox Bancroft, FOXI Cortes, Frederick Earp, Geo Meek, Gotthilf Fischer, Hallo Loon, Hawk Carter, Hazel Kyrgyz, Hecter Barbosa, Hex Link, Ice Pak, Ideasu Mukerji, Itoku Kamachi, Jared Halleck, Jaykob Carter, Jennifer Drumheller, JensMartin Tomsen, JIAB Boa, Jim Gustafson, JimmyJet Fossett, Joseph Rustamova, Jt Volos, Karilyn Kidomen, Kaysha Sion, Keaton Nacon, Kevin Susenko, Khashai Steinbeck, Kira Cuddihy, Kit Massiel, Kojo Dixon, KUieTSToRm Lightcloud, Kwai Kyong, Kyrtis Daehlie, LazyGunGuy Bartlett, Lewcas Zapedzki, Lioc Cioc, LLIB Utu, Lou Liebknecht, Luca Draken, Maci Homewood, Major Sewell, Mari Todriya, MarieElize Noel, matt27 Churchill, Maverick Miasma, maydaysos Young, Mediaho Ball, Mikayla Gillespie, Mike Faulkland, Modfire Milland, MollyBrown Foxley, Mosley Jewell, Nuahs Zapedzki, Nyx Divine, Panther Farber, Paul Bumi, Preciousse Moody, PrincessNina Prefect, Prio Serpentine, Rainbow Drake, Randall Rall, Randy Kazan, Reinhart Mokeev, Rhyph Somme, Rico Roizman, Ruge Dryke, Ryan Orbit, Safira Rosher, Samantha Bainbridge, Sammy Foxley, Sash Furst, Saturn Ariantho, Sienna Summers, Skye Enoch, Sofie Kanno, Solar Legion, Sonic Oki, Sunra Saenz, Taina Heart, Taryn Sprawl, tenerife Wei, TomDragon Nilsson, Trebla Reve, Trouble Carnell, user1cat Orbit, Vance Merlin, Veritas Variscan, Web Page, Wi3g3ht3s Ihnen, WinDrftr DeFarge, Yuu Nakamichi, Zac Delec, Zed Fairweather, Zimmo Hallard. APR Copyright (C) 2000-2004 The Apache Software Foundation cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) @@ -27,7 +27,7 @@ Alle Rechte vorbehalten. Details siehe licenses.txt. Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf. G.722.1 Anhang C) -Mr. Watson - kommen Sie bitte her - ich möchte Sie sehen. +Mr. Watson – kommen Sie bitte her – ich möchte Sie sehen. Sie befinden sich in [POSITION] diff --git a/linden/indra/newview/skins/xui/de/floater_about_land.xml b/linden/indra/newview/skins/xui/de/floater_about_land.xml index c2da0f0..964f142 100644 --- a/linden/indra/newview/skins/xui/de/floater_about_land.xml +++ b/linden/indra/newview/skins/xui/de/floater_about_land.xml @@ -342,8 +342,7 @@ -