Merge viewer-benefits
Replace MAX_AGENT_ATTACHMENTS with sim based response Replace max groups with benefits based response Upload costs are now handled by sim response Removed no-longer-needed lleconomy files and classes Removed dead fields from hippolimits and hippogridmanager Also removed lame LL code that is redundant and silly On non SL grids, when values are not provided for benefits, they will be set to the values granting maximum liberty. Old standardized responses still work when benefits aren't implemented.
This commit is contained in:
@@ -244,7 +244,6 @@ const U8 SIM_ACCESS_DOWN = 254;
|
||||
const U8 SIM_ACCESS_MAX = SIM_ACCESS_ADULT;
|
||||
|
||||
// attachment constants
|
||||
const U32 MAX_AGENT_ATTACHMENTS = 38;
|
||||
const U8 ATTACHMENT_ADD = 0x80;
|
||||
|
||||
// god levels
|
||||
|
||||
@@ -17,7 +17,6 @@ include_directories(
|
||||
|
||||
set(llinventory_SOURCE_FILES
|
||||
llcategory.cpp
|
||||
lleconomy.cpp
|
||||
llfoldertype.cpp
|
||||
llinventory.cpp
|
||||
llinventorydefines.cpp
|
||||
@@ -40,7 +39,6 @@ set(llinventory_HEADER_FILES
|
||||
CMakeLists.txt
|
||||
|
||||
llcategory.h
|
||||
lleconomy.h
|
||||
llfoldertype.h
|
||||
llinventory.h
|
||||
llinventorydefines.h
|
||||
|
||||
@@ -1,288 +0,0 @@
|
||||
/**
|
||||
* @file lleconomy.cpp
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "lleconomy.h"
|
||||
#include "llerror.h"
|
||||
#include "message.h"
|
||||
#include "v3math.h"
|
||||
|
||||
|
||||
LLGlobalEconomy::LLGlobalEconomy()
|
||||
: mObjectCount( -1 ),
|
||||
mObjectCapacity( -1 ),
|
||||
mPriceObjectClaim( -1 ),
|
||||
mPricePublicObjectDecay( -1 ),
|
||||
mPricePublicObjectDelete( -1 ),
|
||||
mPriceEnergyUnit( -1 ),
|
||||
mPriceUpload( -1 ),
|
||||
mPriceRentLight( -1 ),
|
||||
mTeleportMinPrice( -1 ),
|
||||
mTeleportPriceExponent( -1 ),
|
||||
mPriceGroupCreate( -1 )
|
||||
{ }
|
||||
|
||||
LLGlobalEconomy::~LLGlobalEconomy()
|
||||
{ }
|
||||
|
||||
void LLGlobalEconomy::addObserver(LLEconomyObserver* observer)
|
||||
{
|
||||
mObservers.push_back(observer);
|
||||
}
|
||||
|
||||
void LLGlobalEconomy::removeObserver(LLEconomyObserver* observer)
|
||||
{
|
||||
std::list<LLEconomyObserver*>::iterator it =
|
||||
std::find(mObservers.begin(), mObservers.end(), observer);
|
||||
if (it != mObservers.end())
|
||||
{
|
||||
mObservers.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
void LLGlobalEconomy::notifyObservers()
|
||||
{
|
||||
for (std::list<LLEconomyObserver*>::iterator it = mObservers.begin();
|
||||
it != mObservers.end();
|
||||
++it)
|
||||
{
|
||||
(*it)->onEconomyDataChange();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLGlobalEconomy::processEconomyData(LLMessageSystem *msg, LLGlobalEconomy* econ_data)
|
||||
{
|
||||
S32 i;
|
||||
F32 f;
|
||||
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCapacity, i);
|
||||
econ_data->setObjectCapacity(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCount, i);
|
||||
econ_data->setObjectCount(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceEnergyUnit, i);
|
||||
econ_data->setPriceEnergyUnit(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceObjectClaim, i);
|
||||
econ_data->setPriceObjectClaim(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDecay, i);
|
||||
econ_data->setPricePublicObjectDecay(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDelete, i);
|
||||
econ_data->setPricePublicObjectDelete(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceUpload, i);
|
||||
econ_data->setPriceUpload(i);
|
||||
#if LL_LINUX
|
||||
// We can optionally fake the received upload price for testing.
|
||||
// Note that the server is within its rights to not obey our fake
|
||||
// price. :)
|
||||
const char* fakeprice_str = getenv("LL_FAKE_UPLOAD_PRICE");
|
||||
if (fakeprice_str)
|
||||
{
|
||||
S32 fakeprice = (S32)atoi(fakeprice_str);
|
||||
LL_WARNS() << "LL_FAKE_UPLOAD_PRICE: Faking upload price as L$" << fakeprice << LL_ENDL;
|
||||
econ_data->setPriceUpload(fakeprice);
|
||||
}
|
||||
#endif
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceRentLight, i);
|
||||
econ_data->setPriceRentLight(i);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_TeleportMinPrice, i);
|
||||
econ_data->setTeleportMinPrice(i);
|
||||
msg->getF32Fast(_PREHASH_Info, _PREHASH_TeleportPriceExponent, f);
|
||||
econ_data->setTeleportPriceExponent(f);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceGroupCreate, i);
|
||||
econ_data->setPriceGroupCreate(i);
|
||||
|
||||
econ_data->notifyObservers();
|
||||
}
|
||||
|
||||
S32 LLGlobalEconomy::calculateTeleportCost(F32 distance) const
|
||||
{
|
||||
S32 min_cost = getTeleportMinPrice();
|
||||
F32 exponent = getTeleportPriceExponent();
|
||||
F32 divisor = 100.f * pow(3.f, exponent);
|
||||
S32 cost = (U32)(distance * pow(log10(distance), exponent) / divisor);
|
||||
if (cost < 0)
|
||||
{
|
||||
cost = 0;
|
||||
}
|
||||
else if (cost < min_cost)
|
||||
{
|
||||
cost = min_cost;
|
||||
}
|
||||
|
||||
return cost;
|
||||
}
|
||||
|
||||
S32 LLGlobalEconomy::calculateLightRent(const LLVector3& object_size) const
|
||||
{
|
||||
F32 intensity_mod = llmax(object_size.magVec(), 1.f);
|
||||
return (S32)(intensity_mod * getPriceRentLight());
|
||||
}
|
||||
|
||||
void LLGlobalEconomy::print()
|
||||
{
|
||||
LL_INFOS() << "Global Economy Settings: " << LL_ENDL;
|
||||
LL_INFOS() << "Object Capacity: " << mObjectCapacity << LL_ENDL;
|
||||
LL_INFOS() << "Object Count: " << mObjectCount << LL_ENDL;
|
||||
LL_INFOS() << "Claim Price Per Object: " << mPriceObjectClaim << LL_ENDL;
|
||||
LL_INFOS() << "Claim Price Per Public Object: " << mPricePublicObjectDecay << LL_ENDL;
|
||||
LL_INFOS() << "Delete Price Per Public Object: " << mPricePublicObjectDelete << LL_ENDL;
|
||||
LL_INFOS() << "Release Price Per Public Object: " << getPricePublicObjectRelease() << LL_ENDL;
|
||||
LL_INFOS() << "Price Per Energy Unit: " << mPriceEnergyUnit << LL_ENDL;
|
||||
LL_INFOS() << "Price Per Upload: " << mPriceUpload << LL_ENDL;
|
||||
LL_INFOS() << "Light Base Price: " << mPriceRentLight << LL_ENDL;
|
||||
LL_INFOS() << "Teleport Min Price: " << mTeleportMinPrice << LL_ENDL;
|
||||
LL_INFOS() << "Teleport Price Exponent: " << mTeleportPriceExponent << LL_ENDL;
|
||||
LL_INFOS() << "Price for group creation: " << mPriceGroupCreate << LL_ENDL;
|
||||
}
|
||||
|
||||
LLRegionEconomy::LLRegionEconomy()
|
||||
: LLGlobalEconomy(),
|
||||
mPriceObjectRent( -1.f ),
|
||||
mPriceObjectScaleFactor( -1.f ),
|
||||
mEnergyEfficiency( -1.f ),
|
||||
mBasePriceParcelClaimDefault(-1),
|
||||
mBasePriceParcelClaimActual(-1),
|
||||
mPriceParcelClaimFactor(-1.f),
|
||||
mBasePriceParcelRent(-1),
|
||||
mAreaOwned(-1.f),
|
||||
mAreaTotal(-1.f)
|
||||
{ }
|
||||
|
||||
LLRegionEconomy::~LLRegionEconomy()
|
||||
{ }
|
||||
|
||||
BOOL LLRegionEconomy::hasData() const
|
||||
{
|
||||
return (mBasePriceParcelRent != -1);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLRegionEconomy::processEconomyData(LLMessageSystem *msg, void** user_data)
|
||||
{
|
||||
S32 i;
|
||||
F32 f;
|
||||
|
||||
LLRegionEconomy *this_ptr = (LLRegionEconomy*)user_data;
|
||||
|
||||
LLGlobalEconomy::processEconomyData(msg, this_ptr);
|
||||
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceParcelClaim, i);
|
||||
this_ptr->setBasePriceParcelClaimDefault(i);
|
||||
msg->getF32(_PREHASH_Info, _PREHASH_PriceParcelClaimFactor, f);
|
||||
this_ptr->setPriceParcelClaimFactor(f);
|
||||
msg->getF32Fast(_PREHASH_Info, _PREHASH_EnergyEfficiency, f);
|
||||
this_ptr->setEnergyEfficiency(f);
|
||||
msg->getF32Fast(_PREHASH_Info, _PREHASH_PriceObjectRent, f);
|
||||
this_ptr->setPriceObjectRent(f);
|
||||
msg->getF32Fast(_PREHASH_Info, _PREHASH_PriceObjectScaleFactor, f);
|
||||
this_ptr->setPriceObjectScaleFactor(f);
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceParcelRent, i);
|
||||
this_ptr->setBasePriceParcelRent(i);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLRegionEconomy::processEconomyDataRequest(LLMessageSystem *msg, void **user_data)
|
||||
{
|
||||
LLRegionEconomy *this_ptr = (LLRegionEconomy*)user_data;
|
||||
if (!this_ptr->hasData())
|
||||
{
|
||||
LL_WARNS() << "Dropping EconomyDataRequest, because EconomyData message "
|
||||
<< "has not been processed" << LL_ENDL;
|
||||
}
|
||||
|
||||
msg->newMessageFast(_PREHASH_EconomyData);
|
||||
msg->nextBlockFast(_PREHASH_Info);
|
||||
msg->addS32Fast(_PREHASH_ObjectCapacity, this_ptr->getObjectCapacity());
|
||||
msg->addS32Fast(_PREHASH_ObjectCount, this_ptr->getObjectCount());
|
||||
msg->addS32Fast(_PREHASH_PriceEnergyUnit, this_ptr->getPriceEnergyUnit());
|
||||
msg->addS32Fast(_PREHASH_PriceObjectClaim, this_ptr->getPriceObjectClaim());
|
||||
msg->addS32Fast(_PREHASH_PricePublicObjectDecay, this_ptr->getPricePublicObjectDecay());
|
||||
msg->addS32Fast(_PREHASH_PricePublicObjectDelete, this_ptr->getPricePublicObjectDelete());
|
||||
msg->addS32Fast(_PREHASH_PriceParcelClaim, this_ptr->mBasePriceParcelClaimActual);
|
||||
msg->addF32Fast(_PREHASH_PriceParcelClaimFactor, this_ptr->mPriceParcelClaimFactor);
|
||||
msg->addS32Fast(_PREHASH_PriceUpload, this_ptr->getPriceUpload());
|
||||
msg->addS32Fast(_PREHASH_PriceRentLight, this_ptr->getPriceRentLight());
|
||||
msg->addS32Fast(_PREHASH_TeleportMinPrice, this_ptr->getTeleportMinPrice());
|
||||
msg->addF32Fast(_PREHASH_TeleportPriceExponent, this_ptr->getTeleportPriceExponent());
|
||||
|
||||
msg->addF32Fast(_PREHASH_EnergyEfficiency, this_ptr->getEnergyEfficiency());
|
||||
msg->addF32Fast(_PREHASH_PriceObjectRent, this_ptr->getPriceObjectRent());
|
||||
msg->addF32Fast(_PREHASH_PriceObjectScaleFactor, this_ptr->getPriceObjectScaleFactor());
|
||||
msg->addS32Fast(_PREHASH_PriceParcelRent, this_ptr->getPriceParcelRent());
|
||||
msg->addS32Fast(_PREHASH_PriceGroupCreate, this_ptr->getPriceGroupCreate());
|
||||
|
||||
msg->sendReliable(msg->getSender());
|
||||
}
|
||||
|
||||
|
||||
S32 LLRegionEconomy::getPriceParcelClaim() const
|
||||
{
|
||||
//return (S32)((F32)mBasePriceParcelClaim * (mAreaTotal / (mAreaTotal - mAreaOwned)));
|
||||
return (S32)((F32)mBasePriceParcelClaimActual * mPriceParcelClaimFactor);
|
||||
}
|
||||
|
||||
S32 LLRegionEconomy::getPriceParcelRent() const
|
||||
{
|
||||
return mBasePriceParcelRent;
|
||||
}
|
||||
|
||||
|
||||
void LLRegionEconomy::print()
|
||||
{
|
||||
this->LLGlobalEconomy::print();
|
||||
|
||||
LL_INFOS() << "Region Economy Settings: " << LL_ENDL;
|
||||
LL_INFOS() << "Land (square meters): " << mAreaTotal << LL_ENDL;
|
||||
LL_INFOS() << "Owned Land (square meters): " << mAreaOwned << LL_ENDL;
|
||||
LL_INFOS() << "Daily Object Rent: " << mPriceObjectRent << LL_ENDL;
|
||||
LL_INFOS() << "Daily Land Rent (per meter): " << getPriceParcelRent() << LL_ENDL;
|
||||
LL_INFOS() << "Energey Efficiency: " << mEnergyEfficiency << LL_ENDL;
|
||||
}
|
||||
|
||||
|
||||
void LLRegionEconomy::setBasePriceParcelClaimDefault(S32 val)
|
||||
{
|
||||
mBasePriceParcelClaimDefault = val;
|
||||
if(mBasePriceParcelClaimActual == -1)
|
||||
{
|
||||
mBasePriceParcelClaimActual = val;
|
||||
}
|
||||
}
|
||||
|
||||
void LLRegionEconomy::setBasePriceParcelClaimActual(S32 val)
|
||||
{
|
||||
mBasePriceParcelClaimActual = val;
|
||||
}
|
||||
|
||||
void LLRegionEconomy::setPriceParcelClaimFactor(F32 val)
|
||||
{
|
||||
mPriceParcelClaimFactor = val;
|
||||
}
|
||||
|
||||
void LLRegionEconomy::setBasePriceParcelRent(S32 val)
|
||||
{
|
||||
mBasePriceParcelRent = val;
|
||||
}
|
||||
@@ -1,159 +0,0 @@
|
||||
/**
|
||||
* @file lleconomy.h
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLECONOMY_H
|
||||
#define LL_LLECONOMY_H
|
||||
|
||||
#include "llsingleton.h"
|
||||
|
||||
class LLMessageSystem;
|
||||
class LLVector3;
|
||||
|
||||
/**
|
||||
* Register an observer to be notified of economy data updates coming from server.
|
||||
*/
|
||||
class LLEconomyObserver
|
||||
{
|
||||
public:
|
||||
virtual ~LLEconomyObserver() {}
|
||||
virtual void onEconomyDataChange() = 0;
|
||||
};
|
||||
|
||||
class LLGlobalEconomy
|
||||
{
|
||||
public:
|
||||
LLGlobalEconomy();
|
||||
virtual ~LLGlobalEconomy();
|
||||
|
||||
// This class defines its singleton internally as a typedef instead of inheriting from
|
||||
// LLSingleton like most others because the LLRegionEconomy sub-class might also
|
||||
// become a singleton and this pattern will more easily disambiguate them.
|
||||
typedef LLSingleton<LLGlobalEconomy> Singleton;
|
||||
|
||||
void initSingleton() { }
|
||||
|
||||
virtual void print();
|
||||
|
||||
void addObserver(LLEconomyObserver* observer);
|
||||
void removeObserver(LLEconomyObserver* observer);
|
||||
void notifyObservers();
|
||||
|
||||
static void processEconomyData(LLMessageSystem *msg, LLGlobalEconomy* econ_data);
|
||||
|
||||
S32 calculateTeleportCost(F32 distance) const;
|
||||
S32 calculateLightRent(const LLVector3& object_size) const;
|
||||
|
||||
S32 getObjectCount() const { return mObjectCount; }
|
||||
S32 getObjectCapacity() const { return mObjectCapacity; }
|
||||
S32 getPriceObjectClaim() const { return mPriceObjectClaim; }
|
||||
S32 getPricePublicObjectDecay() const { return mPricePublicObjectDecay; }
|
||||
S32 getPricePublicObjectDelete() const { return mPricePublicObjectDelete; }
|
||||
S32 getPricePublicObjectRelease() const { return mPriceObjectClaim - mPricePublicObjectDelete; }
|
||||
S32 getPriceEnergyUnit() const { return mPriceEnergyUnit; }
|
||||
S32 getPriceUpload() const { return mPriceUpload; }
|
||||
S32 getPriceRentLight() const { return mPriceRentLight; }
|
||||
S32 getTeleportMinPrice() const { return mTeleportMinPrice; }
|
||||
F32 getTeleportPriceExponent() const { return mTeleportPriceExponent; }
|
||||
S32 getPriceGroupCreate() const { return mPriceGroupCreate; }
|
||||
|
||||
|
||||
void setObjectCount(S32 val) { mObjectCount = val; }
|
||||
void setObjectCapacity(S32 val) { mObjectCapacity = val; }
|
||||
void setPriceObjectClaim(S32 val) { mPriceObjectClaim = val; }
|
||||
void setPricePublicObjectDecay(S32 val) { mPricePublicObjectDecay = val; }
|
||||
void setPricePublicObjectDelete(S32 val) { mPricePublicObjectDelete = val; }
|
||||
void setPriceEnergyUnit(S32 val) { mPriceEnergyUnit = val; }
|
||||
void setPriceUpload(S32 val) { mPriceUpload = val; }
|
||||
void setPriceRentLight(S32 val) { mPriceRentLight = val; }
|
||||
void setTeleportMinPrice(S32 val) { mTeleportMinPrice = val; }
|
||||
void setTeleportPriceExponent(F32 val) { mTeleportPriceExponent = val; }
|
||||
void setPriceGroupCreate(S32 val) { mPriceGroupCreate = val; }
|
||||
|
||||
private:
|
||||
S32 mObjectCount;
|
||||
S32 mObjectCapacity;
|
||||
S32 mPriceObjectClaim; // per primitive
|
||||
S32 mPricePublicObjectDecay; // per primitive
|
||||
S32 mPricePublicObjectDelete; // per primitive
|
||||
S32 mPriceEnergyUnit;
|
||||
S32 mPriceUpload;
|
||||
S32 mPriceRentLight;
|
||||
S32 mTeleportMinPrice;
|
||||
F32 mTeleportPriceExponent;
|
||||
S32 mPriceGroupCreate;
|
||||
|
||||
std::list<LLEconomyObserver*> mObservers;
|
||||
};
|
||||
|
||||
|
||||
class LLRegionEconomy : public LLGlobalEconomy
|
||||
{
|
||||
public:
|
||||
LLRegionEconomy();
|
||||
~LLRegionEconomy();
|
||||
|
||||
static void processEconomyData(LLMessageSystem *msg, void **user_data);
|
||||
static void processEconomyDataRequest(LLMessageSystem *msg, void **user_data);
|
||||
|
||||
void print();
|
||||
|
||||
BOOL hasData() const;
|
||||
F32 getPriceObjectRent() const { return mPriceObjectRent; }
|
||||
F32 getPriceObjectScaleFactor() const {return mPriceObjectScaleFactor;}
|
||||
F32 getEnergyEfficiency() const { return mEnergyEfficiency; }
|
||||
S32 getPriceParcelClaim() const;
|
||||
S32 getPriceParcelRent() const;
|
||||
F32 getAreaOwned() const { return mAreaOwned; }
|
||||
F32 getAreaTotal() const { return mAreaTotal; }
|
||||
S32 getBasePriceParcelClaimActual() const { return mBasePriceParcelClaimActual; }
|
||||
|
||||
void setPriceObjectRent(F32 val) { mPriceObjectRent = val; }
|
||||
void setPriceObjectScaleFactor(F32 val) { mPriceObjectScaleFactor = val; }
|
||||
void setEnergyEfficiency(F32 val) { mEnergyEfficiency = val; }
|
||||
|
||||
void setBasePriceParcelClaimDefault(S32 val);
|
||||
void setBasePriceParcelClaimActual(S32 val);
|
||||
void setPriceParcelClaimFactor(F32 val);
|
||||
void setBasePriceParcelRent(S32 val);
|
||||
|
||||
void setAreaOwned(F32 val) { mAreaOwned = val; }
|
||||
void setAreaTotal(F32 val) { mAreaTotal = val; }
|
||||
|
||||
private:
|
||||
F32 mPriceObjectRent;
|
||||
F32 mPriceObjectScaleFactor;
|
||||
F32 mEnergyEfficiency;
|
||||
|
||||
S32 mBasePriceParcelClaimDefault;
|
||||
S32 mBasePriceParcelClaimActual;
|
||||
F32 mPriceParcelClaimFactor;
|
||||
S32 mBasePriceParcelRent;
|
||||
|
||||
F32 mAreaOwned;
|
||||
F32 mAreaTotal;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -120,6 +120,7 @@ set(viewer_SOURCE_FILES
|
||||
llaisapi.cpp
|
||||
llagent.cpp
|
||||
llagentaccess.cpp
|
||||
llagentbenefits.cpp
|
||||
llagentcamera.cpp
|
||||
llagentdata.cpp
|
||||
llagentlanguage.cpp
|
||||
@@ -666,6 +667,7 @@ set(viewer_HEADER_FILES
|
||||
llaisapi.h
|
||||
llagent.h
|
||||
llagentaccess.h
|
||||
llagentbenefits.h
|
||||
llagentcamera.h
|
||||
llagentdata.h
|
||||
llagentlanguage.h
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include <stdtypes.h>
|
||||
#include <lldir.h>
|
||||
#include <lleconomy.h>
|
||||
#include <llerror.h>
|
||||
#include <llfile.h>
|
||||
#include <llhttpclient.h>
|
||||
@@ -59,7 +58,6 @@ HippoGridInfo::HippoGridInfo(const std::string& gridName) :
|
||||
mRenderCompat(true),
|
||||
mAutoUpdate(false),
|
||||
mLocked(false),
|
||||
mMaxAgentGroups(-1),
|
||||
mCurrencySymbol("OS$"),
|
||||
mCurrencyText("OS Dollars"),
|
||||
mRealCurrencySymbol("US$"),
|
||||
@@ -414,37 +412,22 @@ void HippoGridInfo::getGridInfo()
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
|
||||
std::string HippoGridInfo::getUploadFee() const
|
||||
{
|
||||
std::string fee;
|
||||
formatFee(fee, LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(), true);
|
||||
return fee;
|
||||
}
|
||||
|
||||
std::string HippoGridInfo::getGroupCreationFee() const
|
||||
{
|
||||
std::string fee;
|
||||
formatFee(fee, LLGlobalEconomy::Singleton::getInstance()->getPriceGroupCreate(), false);
|
||||
return fee;
|
||||
}
|
||||
|
||||
std::string HippoGridInfo::getDirectoryFee() const
|
||||
{
|
||||
std::string fee;
|
||||
formatFee(fee, mDirectoryFee, true);
|
||||
std::string fee = formatFee(mDirectoryFee, true);
|
||||
if (mDirectoryFee != 0) fee += "/" + LLTrans::getString("hippo_label_week");
|
||||
return fee;
|
||||
}
|
||||
|
||||
void HippoGridInfo::formatFee(std::string &fee, int cost, bool showFree) const
|
||||
std::string HippoGridInfo::formatFee(int cost, bool showFree) const
|
||||
{
|
||||
if (showFree && (cost == 0))
|
||||
if (showFree && (cost < 0))
|
||||
{
|
||||
fee = LLTrans::getString("hippo_label_free");
|
||||
return LLTrans::getString("hippo_label_free");
|
||||
}
|
||||
else
|
||||
{
|
||||
fee = llformat("%s%d", getCurrencySymbol().c_str(), cost);
|
||||
return llformat("%s%d", getCurrencySymbol().c_str(), cost);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -56,15 +56,13 @@ public:
|
||||
const std::string& getVoiceConnector() const { return mVoiceConnector; }
|
||||
bool isRenderCompat() const { return mRenderCompat; }
|
||||
std::string getGridNick() const;
|
||||
int getMaxAgentGroups() const { return mMaxAgentGroups; }
|
||||
|
||||
const std::string& getCurrencySymbol() const { return mCurrencySymbol; }
|
||||
const std::string& getCurrencyText() const { return mCurrencyText; }
|
||||
const std::string& getRealCurrencySymbol() const { return mRealCurrencySymbol; }
|
||||
std::string getUploadFee() const;
|
||||
std::string getGroupCreationFee() const;
|
||||
const int& getClassifiedFee() const { return mClassifiedFee; }
|
||||
std::string getDirectoryFee() const;
|
||||
std::string formatFee(S32 cost, bool showFree = true) const;
|
||||
|
||||
void setPlatform (const std::string& platform);
|
||||
void setPlatform (Platform platform);
|
||||
@@ -82,7 +80,6 @@ public:
|
||||
void setSearchUrl(const std::string& url);
|
||||
void setGridMessage(const std::string& message);
|
||||
void setRenderCompat(bool compat);
|
||||
void setMaxAgentGroups(int max) { mMaxAgentGroups = max; }
|
||||
void setVoiceConnector(const std::string& vc) { mVoiceConnector = vc; }
|
||||
void setUPCSupported(bool on);
|
||||
bool getUPCSupported();
|
||||
@@ -123,7 +120,6 @@ private:
|
||||
bool mAutoUpdate;
|
||||
bool mLocked;
|
||||
bool mUPCSupported;
|
||||
int mMaxAgentGroups;
|
||||
|
||||
std::string mCurrencySymbol;
|
||||
std::string mCurrencyText;
|
||||
@@ -143,7 +139,6 @@ private:
|
||||
|
||||
static std::string sanitizeUri(std::string const& uri_in);
|
||||
void useHttps(void);
|
||||
void formatFee(std::string &fee, int cost, bool showFree) const;
|
||||
|
||||
static void onXmlElementStart(void* userData, const XML_Char* name, const XML_Char** atts);
|
||||
static void onXmlElementEnd(void* userData, const XML_Char* name);
|
||||
|
||||
@@ -28,29 +28,8 @@ void HippoLimits::setLimits()
|
||||
}
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
// gMaxAgentGroups is now sent by login.cgi, which
|
||||
// looks it up from globals.xml.
|
||||
//
|
||||
// For now we need an old default value however,
|
||||
// so the viewer can be deployed ahead of login.cgi.
|
||||
//
|
||||
constexpr S32 DEFAULT_MAX_AGENT_GROUPS = 60;
|
||||
}
|
||||
|
||||
void HippoLimits::setMaxAgentGroups()
|
||||
{
|
||||
//KC: new server defined max groups
|
||||
if (auto grid = gHippoGridManager->getConnectedGrid())
|
||||
mMaxAgentGroups = grid->getMaxAgentGroups();
|
||||
if (mMaxAgentGroups <= 0)
|
||||
mMaxAgentGroups = DEFAULT_MAX_AGENT_GROUPS;
|
||||
}
|
||||
|
||||
void HippoLimits::setOpenSimLimits()
|
||||
{
|
||||
setMaxAgentGroups();
|
||||
mMaxPrimScale = 8192.0f;
|
||||
mMaxHeight = 10000.0f;
|
||||
mMinPrimScale = 0.001f;
|
||||
@@ -67,7 +46,6 @@ void HippoLimits::setOpenSimLimits()
|
||||
|
||||
void HippoLimits::setWhiteCoreLimits()
|
||||
{
|
||||
setMaxAgentGroups();
|
||||
mMaxPrimScale = 8192.0f;
|
||||
mMinPrimScale = 0.001f;
|
||||
mMaxHeight = 10000.0f;
|
||||
@@ -78,7 +56,6 @@ void HippoLimits::setWhiteCoreLimits()
|
||||
void HippoLimits::setSecondLifeLimits()
|
||||
{
|
||||
LL_INFOS() << "Using Second Life limits." << LL_ENDL;
|
||||
setMaxAgentGroups();
|
||||
|
||||
mMinPrimScale = 0.01f;
|
||||
mMaxHeight = 4096.0f;
|
||||
|
||||
@@ -8,7 +8,6 @@ class HippoLimits
|
||||
public:
|
||||
HippoLimits();
|
||||
|
||||
int getMaxAgentGroups() const { return mMaxAgentGroups; }
|
||||
float getMaxHeight() const { return mMaxHeight; }
|
||||
float getMinHoleSize() const { return mMinHoleSize; }
|
||||
float getMaxHollow() const { return mMaxHollow; }
|
||||
@@ -18,14 +17,12 @@ public:
|
||||
void setLimits();
|
||||
|
||||
private:
|
||||
int mMaxAgentGroups;
|
||||
float mMaxHeight;
|
||||
float mMinHoleSize;
|
||||
float mMaxHollow;
|
||||
float mMaxPrimScale;
|
||||
float mMinPrimScale;
|
||||
|
||||
void setMaxAgentGroups();
|
||||
void setOpenSimLimits();
|
||||
void setWhiteCoreLimits();
|
||||
void setSecondLifeLimits();
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
//#include "llsdserialize.h"
|
||||
#include "lltooldraganddrop.h"
|
||||
//#include "llassetuploadresponders.h"
|
||||
//#include "lleconomy.h"
|
||||
//#include "llagentbenefits.h"
|
||||
|
||||
//#include "llfloaterperms.h"
|
||||
|
||||
@@ -635,7 +635,7 @@ void ImportTracker::send_inventory(LLSD& prim)
|
||||
body["next_owner_mask"] = LLSD::Integer(U32_MAX);
|
||||
body["group_mask"] = LLSD::Integer(U32_MAX);
|
||||
body["everyone_mask"] = LLSD::Integer(U32_MAX);
|
||||
body["expected_upload_cost"] = LLSD::Integer(LLGlobalEconomy::Singleton::getInstance()->getPriceUpload());
|
||||
body["expected_upload_cost"] = LLAgentBenefits::current().getTextureUploadCost();
|
||||
//cmdline_printchat("posting "+ data->assetid.asString());
|
||||
LLHTTPClient::post(url, body, new JCImportInventoryResponder(body, data->assetid, data->type,data));
|
||||
//error = TRUE;
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "pipeline.h"
|
||||
|
||||
#include "llagentaccess.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llagentwearables.h"
|
||||
#include "llagentui.h"
|
||||
@@ -3160,7 +3161,7 @@ BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOO
|
||||
|
||||
BOOL LLAgent::canJoinGroups() const
|
||||
{
|
||||
return (S32)mGroups.size() < gHippoLimits->getMaxAgentGroups();
|
||||
return (S32)mGroups.size() < LLAgentBenefitsMgr::current().getGroupMembershipLimit();
|
||||
}
|
||||
|
||||
LLQuaternion LLAgent::getHeadRotation()
|
||||
|
||||
260
indra/newview/llagentbenefits.cpp
Normal file
260
indra/newview/llagentbenefits.cpp
Normal file
@@ -0,0 +1,260 @@
|
||||
/**
|
||||
* @file llagentbenefits.cpp
|
||||
*
|
||||
* $LicenseInfo:firstyear=2019&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2019, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include "llagentbenefits.h"
|
||||
|
||||
LLAgentBenefits::LLAgentBenefits():
|
||||
m_initalized(false),
|
||||
m_animated_object_limit(-1),
|
||||
m_animation_upload_cost(-1),
|
||||
m_attachment_limit(-1),
|
||||
m_group_membership_limit(-1),
|
||||
m_picks_limit(-1),
|
||||
m_sound_upload_cost(-1),
|
||||
m_texture_upload_cost(-1)
|
||||
{
|
||||
}
|
||||
|
||||
LLAgentBenefits::~LLAgentBenefits()
|
||||
{
|
||||
}
|
||||
|
||||
// This could be extended to a template scheme or otherwise modified
|
||||
// to support other types, if and when needed. Currently all fields
|
||||
// the viewer cares about are integer.
|
||||
bool get_required_S32(const LLSD& sd, const LLSD::String& key, S32& value)
|
||||
{
|
||||
value = -1;
|
||||
if (sd.has(key))
|
||||
{
|
||||
value = sd[key].asInteger();
|
||||
return true;
|
||||
}
|
||||
|
||||
LL_WARNS("Benefits") << "Missing required benefit field " << key << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LLAgentBenefits::init(const LLSD& benefits_sd)
|
||||
{
|
||||
LL_DEBUGS("Benefits") << "initializing benefits from " << benefits_sd << LL_ENDL;
|
||||
|
||||
if (!get_required_S32(benefits_sd, "animated_object_limit", m_animated_object_limit))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!get_required_S32(benefits_sd, "animation_upload_cost", m_animation_upload_cost))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!get_required_S32(benefits_sd, "attachment_limit", m_attachment_limit))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!get_required_S32(benefits_sd, "create_group_cost", m_create_group_cost))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!get_required_S32(benefits_sd, "group_membership_limit", m_group_membership_limit))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!get_required_S32(benefits_sd, "picks_limit", m_picks_limit))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!get_required_S32(benefits_sd, "sound_upload_cost", m_sound_upload_cost))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!get_required_S32(benefits_sd, "texture_upload_cost", m_texture_upload_cost))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// FIXME PREMIUM - either use this field or get rid of it
|
||||
m_initalized = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLAgentBenefits::initNonSL(const LLSD& benefits_sd)
|
||||
{
|
||||
if (!get_required_S32(benefits_sd, "max_groups", m_group_membership_limit)
|
||||
&& !get_required_S32(benefits_sd, "max-agent-groups", m_group_membership_limit))
|
||||
m_group_membership_limit = S32_MAX;
|
||||
m_picks_limit = m_animated_object_limit = m_attachment_limit = S32_MAX;
|
||||
m_texture_upload_cost = m_sound_upload_cost = m_create_group_cost = m_animation_upload_cost = 0;
|
||||
}
|
||||
|
||||
void LLAgentBenefits::processEconomyData(LLMessageSystem* msg)
|
||||
{
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceUpload, m_texture_upload_cost);
|
||||
m_sound_upload_cost = m_animation_upload_cost = m_texture_upload_cost;
|
||||
msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceGroupCreate, m_create_group_cost);
|
||||
|
||||
LL_INFOS_ONCE("Messaging") << "EconomyData message arrived; upload cost is L$" << m_texture_upload_cost << " group cost is " << m_create_group_cost << LL_ENDL;
|
||||
}
|
||||
|
||||
S32 LLAgentBenefits::getAnimatedObjectLimit() const
|
||||
{
|
||||
return m_animated_object_limit;
|
||||
}
|
||||
|
||||
S32 LLAgentBenefits::getAnimationUploadCost() const
|
||||
{
|
||||
return m_animation_upload_cost;
|
||||
}
|
||||
|
||||
S32 LLAgentBenefits::getAttachmentLimit() const
|
||||
{
|
||||
return m_attachment_limit;
|
||||
}
|
||||
|
||||
S32 LLAgentBenefits::getCreateGroupCost() const
|
||||
{
|
||||
return m_create_group_cost;
|
||||
}
|
||||
|
||||
S32 LLAgentBenefits::getGroupMembershipLimit() const
|
||||
{
|
||||
return m_group_membership_limit;
|
||||
}
|
||||
|
||||
S32 LLAgentBenefits::getPicksLimit() const
|
||||
{
|
||||
return m_picks_limit;
|
||||
}
|
||||
|
||||
S32 LLAgentBenefits::getSoundUploadCost() const
|
||||
{
|
||||
return m_sound_upload_cost;
|
||||
}
|
||||
|
||||
S32 LLAgentBenefits::getTextureUploadCost() const
|
||||
{
|
||||
return m_texture_upload_cost;
|
||||
}
|
||||
|
||||
bool LLAgentBenefits::findUploadCost(LLAssetType::EType& asset_type, S32& cost) const
|
||||
{
|
||||
bool succ = false;
|
||||
if (asset_type == LLAssetType::AT_TEXTURE)
|
||||
{
|
||||
cost = getTextureUploadCost();
|
||||
succ = true;
|
||||
}
|
||||
else if (asset_type == LLAssetType::AT_SOUND)
|
||||
{
|
||||
cost = getSoundUploadCost();
|
||||
succ = true;
|
||||
}
|
||||
else if (asset_type == LLAssetType::AT_ANIMATION)
|
||||
{
|
||||
cost = getAnimationUploadCost();
|
||||
succ = true;
|
||||
}
|
||||
return succ;
|
||||
}
|
||||
|
||||
LLAgentBenefitsMgr::LLAgentBenefitsMgr()
|
||||
{
|
||||
}
|
||||
|
||||
LLAgentBenefitsMgr::~LLAgentBenefitsMgr()
|
||||
{
|
||||
}
|
||||
|
||||
// static
|
||||
LLAgentBenefits& LLAgentBenefitsMgr::current()
|
||||
{
|
||||
return instance().mCurrent;
|
||||
}
|
||||
|
||||
// static
|
||||
const LLAgentBenefits& LLAgentBenefitsMgr::get(const std::string& package)
|
||||
{
|
||||
if (instance().mPackageMap.find(package) != instance().mPackageMap.end())
|
||||
{
|
||||
return instance().mPackageMap[package];
|
||||
}
|
||||
else
|
||||
{
|
||||
return instance().mDefault;
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLAgentBenefitsMgr::init(const std::string& package, const LLSD& benefits_sd)
|
||||
{
|
||||
LLAgentBenefits benefits;
|
||||
if (!benefits.init(benefits_sd))
|
||||
{
|
||||
LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
instance().mPackageMap[package] = benefits;
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLAgentBenefitsMgr::initCurrent(const std::string& package, const LLSD& benefits_sd)
|
||||
{
|
||||
LLAgentBenefits benefits;
|
||||
if (!benefits.init(benefits_sd))
|
||||
{
|
||||
LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
instance().mCurrent = benefits;
|
||||
instance().mCurrentName = package;
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
void LLAgentBenefitsMgr::initNonSL(const LLSD& benefits_sd)
|
||||
{
|
||||
mCurrent.initNonSL(benefits_sd);
|
||||
mCurrentName = "NonSL";
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLAgentBenefitsMgr::has(const std::string& package)
|
||||
{
|
||||
return instance().mPackageMap.find(package) != instance().mPackageMap.end();
|
||||
}
|
||||
|
||||
//static
|
||||
bool LLAgentBenefitsMgr::isCurrent(const std::string& package)
|
||||
{
|
||||
return instance().mCurrentName == package;
|
||||
}
|
||||
92
indra/newview/llagentbenefits.h
Normal file
92
indra/newview/llagentbenefits.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
* @file llagentbenefits.h
|
||||
*
|
||||
* $LicenseInfo:firstyear=2019&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2019, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_AGENTBENEFITS_H
|
||||
#define LL_AGENTBENEFITS_H
|
||||
|
||||
#include "llsingleton.h"
|
||||
#include "llsd.h"
|
||||
#include "llassettype.h"
|
||||
|
||||
class LLAgentBenefits
|
||||
{
|
||||
public:
|
||||
LLAgentBenefits();
|
||||
~LLAgentBenefits();
|
||||
LOG_CLASS(LLAgentBenefits);
|
||||
|
||||
bool init(const LLSD& benefits_sd);
|
||||
void initNonSL(const LLSD& benefits_sd);
|
||||
void processEconomyData(LLMessageSystem*);
|
||||
|
||||
S32 getAnimatedObjectLimit() const;
|
||||
S32 getAnimationUploadCost() const;
|
||||
S32 getAttachmentLimit() const;
|
||||
S32 getCreateGroupCost() const;
|
||||
S32 getGroupMembershipLimit() const;
|
||||
S32 getPicksLimit() const;
|
||||
S32 getSoundUploadCost() const;
|
||||
S32 getTextureUploadCost() const;
|
||||
|
||||
bool findUploadCost(LLAssetType::EType& asset_type, S32& cost) const;
|
||||
|
||||
private:
|
||||
S32 m_animated_object_limit;
|
||||
S32 m_animation_upload_cost;
|
||||
S32 m_attachment_limit;
|
||||
S32 m_create_group_cost;
|
||||
S32 m_group_membership_limit;
|
||||
S32 m_picks_limit;
|
||||
S32 m_sound_upload_cost;
|
||||
S32 m_texture_upload_cost;
|
||||
|
||||
bool m_initalized;
|
||||
};
|
||||
|
||||
class LLAgentBenefitsMgr : public LLSingleton<LLAgentBenefitsMgr>
|
||||
{
|
||||
friend class LLSingleton<LLAgentBenefitsMgr>;
|
||||
LLAgentBenefitsMgr();
|
||||
~LLAgentBenefitsMgr();
|
||||
LOG_CLASS(LLAgentBenefitsMgr);
|
||||
|
||||
public:
|
||||
static LLAgentBenefits& current();
|
||||
static const LLAgentBenefits& get(const std::string& package);
|
||||
static bool init(const std::string& package, const LLSD& benefits_sd);
|
||||
static bool initCurrent(const std::string& package, const LLSD& benefits_sd);
|
||||
void initNonSL(const LLSD& benefits_sd);
|
||||
static bool has(const std::string& package);
|
||||
static bool isCurrent(const std::string& package);
|
||||
|
||||
private:
|
||||
std::string mCurrentName;
|
||||
LLAgentBenefits mCurrent;
|
||||
LLAgentBenefits mDefault;
|
||||
std::map<std::string, LLAgentBenefits> mPackageMap;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
// viewer includes
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llcompilequeue.h"
|
||||
#include "llfloaterbuycurrency.h"
|
||||
#include "statemachine/aifilepicker.h"
|
||||
@@ -59,7 +60,6 @@
|
||||
|
||||
// library includes
|
||||
#include "lldir.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llfocusmgr.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
@@ -326,7 +326,11 @@ void LLAssetUploadResponder::uploadFailure(const LLSD& content)
|
||||
// deal with L$ errors
|
||||
if (reason == "insufficient funds")
|
||||
{
|
||||
S32 price = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
S32 price;
|
||||
if (content.has("upload_price"))
|
||||
price = content["upload_price"];
|
||||
else
|
||||
LLAgentBenefitsMgr::current().findUploadCost(mAssetType, price);
|
||||
LLFloaterBuyCurrency::buyCurrency("Uploading costs", price);
|
||||
}
|
||||
else
|
||||
@@ -390,13 +394,14 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
|
||||
|
||||
// Update L$ and ownership credit information
|
||||
// since it probably changed on the server
|
||||
if (asset_type == LLAssetType::AT_TEXTURE ||
|
||||
if (content.has("upload_price"))
|
||||
expected_upload_cost = content["upload_price"];
|
||||
else if (asset_type == LLAssetType::AT_TEXTURE ||
|
||||
asset_type == LLAssetType::AT_SOUND ||
|
||||
asset_type == LLAssetType::AT_ANIMATION ||
|
||||
asset_type == LLAssetType::AT_MESH)
|
||||
{
|
||||
expected_upload_cost =
|
||||
LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
LLAgentBenefitsMgr::current().findUploadCost(asset_type, expected_upload_cost);
|
||||
}
|
||||
|
||||
LL_INFOS() << "Adding " << content["new_inventory_item"].asUUID() << " "
|
||||
|
||||
@@ -36,13 +36,13 @@
|
||||
#include "llbvhloader.h"
|
||||
#include "lldatapacker.h"
|
||||
#include "lldir.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llvfile.h"
|
||||
#include "llapr.h"
|
||||
#include "llstring.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llanimationstates.h"
|
||||
#include "llbbox.h"
|
||||
#include "llbutton.h"
|
||||
@@ -229,7 +229,7 @@ BOOL LLFloaterBvhPreview::postBuild()
|
||||
getChild<LLSlider>("priority")->setMaxValue(7);
|
||||
}
|
||||
|
||||
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee());
|
||||
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->formatFee(LLAgentBenefitsMgr::current().getAnimationUploadCost()));
|
||||
childSetAction("ok_btn", onBtnOK, this);
|
||||
setDefaultBtn();
|
||||
|
||||
@@ -1238,7 +1238,7 @@ void LLFloaterBvhPreview::onBtnOK(void* userdata)
|
||||
std::string name = floaterp->getChild<LLUICtrl>("name_form")->getValue().asString();
|
||||
std::string desc = floaterp->getChild<LLUICtrl>("description_form")->getValue().asString();
|
||||
LLAssetStorage::LLStoreAssetCallback callback = NULL;
|
||||
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
S32 expected_upload_cost = LLAgentBenefitsMgr::current().getAnimationUploadCost();
|
||||
void *userdata = NULL;
|
||||
|
||||
// <edit>
|
||||
@@ -1268,7 +1268,9 @@ void LLFloaterBvhPreview::onBtnOK(void* userdata)
|
||||
0,
|
||||
LLFolderType::FT_NONE,
|
||||
LLInventoryType::IT_ANIMATION,
|
||||
LLFloaterPerms::getNextOwnerPerms("Uploads"), LLFloaterPerms::getGroupPerms("Uploads"), LLFloaterPerms::getEveryonePerms("Uploads"),
|
||||
LLFloaterPerms::getNextOwnerPerms("Uploads"),
|
||||
LLFloaterPerms::getGroupPerms("Uploads"),
|
||||
LLFloaterPerms::getEveryonePerms("Uploads"),
|
||||
name,
|
||||
callback, expected_upload_cost, userdata);
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
|
||||
#include "hbfloatergrouptitles.h"
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llbutton.h"
|
||||
#include "llfloatergroupinvite.h"
|
||||
#include "llgroupactions.h"
|
||||
@@ -187,7 +188,7 @@ void LLPanelGroups::setTexts()
|
||||
LLUICtrl* ctrl(getChild<LLUICtrl>("groupcount"));
|
||||
size_t count(gAgent.mGroups.size());
|
||||
ctrl->setTextArg("[COUNT]", llformat("%d", count));
|
||||
int maxgroups(gHippoLimits->getMaxAgentGroups());
|
||||
int maxgroups(LLAgentBenefitsMgr::current().getGroupMembershipLimit());
|
||||
ctrl->setTextArg("[MAX]", llformat("%d", maxgroups));
|
||||
ctrl->setTextArg("[LEFT]", llformat("%d", maxgroups - count));
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "llimagej2c.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcombobox.h"
|
||||
#include "lldrawable.h"
|
||||
@@ -96,7 +97,7 @@ BOOL LLFloaterImagePreview::postBuild()
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee());
|
||||
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->formatFee(LLAgentBenefitsMgr::current().getTextureUploadCost()));
|
||||
|
||||
LLCtrlSelectionInterface* iface = childGetSelectionInterface("clothing_type_combo");
|
||||
if (iface)
|
||||
|
||||
@@ -48,11 +48,11 @@
|
||||
#include "llviewermenufile.h" // upload_new_resource()
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llstring.h"
|
||||
#include "lleconomy.h"
|
||||
|
||||
// linden includes
|
||||
#include "llassetstorage.h"
|
||||
#include "llinventorytype.h"
|
||||
#include "llagentbenefits.h"
|
||||
|
||||
#include "hippogridmanager.h"
|
||||
|
||||
@@ -134,13 +134,37 @@ BOOL LLFloaterNameDesc::postBuild()
|
||||
// Cancel button
|
||||
getChild<LLUICtrl>("cancel_btn")->setCommitCallback(boost::bind(&LLFloaterNameDesc::onBtnCancel, this));
|
||||
|
||||
getChild<LLUICtrl>("ok_btn")->setLabelArg("[UPLOADFEE]", llformat("%s%d", gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(), LLGlobalEconomy::Singleton::getInstance()->getPriceUpload()));
|
||||
S32 expected_upload_cost = getExpectedUploadCost();
|
||||
getChild<LLUICtrl>("ok_btn")->setLabelArg("[UPLOADFEE]", llformat("%s%d", gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(), expected_upload_cost));
|
||||
|
||||
setDefaultBtn("ok_btn");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
S32 LLFloaterNameDesc::getExpectedUploadCost() const
|
||||
{
|
||||
std::string exten = gDirUtilp->getExtension(mFilename);
|
||||
LLAssetType::EType asset_type = exten == "wav" ? LLAssetType::AT_SOUND
|
||||
: (exten == "anim" || exten == "bvh") ? LLAssetType::AT_ANIMATION
|
||||
: exten != "lsl" ? LLAssetType::AT_TEXTURE
|
||||
: asset_type = LLAssetType::AT_NONE;
|
||||
S32 upload_cost = -1;
|
||||
|
||||
if (asset_type != LLAssetType::AT_NONE)
|
||||
{
|
||||
if (!LLAgentBenefitsMgr::current().findUploadCost(asset_type, upload_cost))
|
||||
{
|
||||
LL_WARNS() << "Unable to find upload cost for asset type " << asset_type << LL_ENDL;
|
||||
}
|
||||
}
|
||||
/*else
|
||||
{
|
||||
LL_WARNS() << "Unable to find upload cost for " << mFilename << LL_ENDL;
|
||||
}*/
|
||||
return upload_cost;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLFloaterNameDesc()
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -173,7 +197,8 @@ void LLFloaterNameDesc::onBtnOK()
|
||||
getChildView("ok_btn")->setEnabled(FALSE); // don't allow inadvertent extra uploads
|
||||
|
||||
LLAssetStorage::LLStoreAssetCallback callback = NULL;
|
||||
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass).
|
||||
S32 expected_upload_cost = getExpectedUploadCost();
|
||||
|
||||
void *nruserdata = NULL;
|
||||
std::string display_name = LLStringUtil::null;
|
||||
|
||||
|
||||
@@ -53,6 +53,8 @@ public:
|
||||
void onBtnCancel();
|
||||
void doCommit();
|
||||
|
||||
S32 getExpectedUploadCost() const;
|
||||
|
||||
protected:
|
||||
virtual void onCommit();
|
||||
|
||||
|
||||
@@ -55,7 +55,6 @@
|
||||
#include "llviewerwindow.h"
|
||||
#include "llstatusbar.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "lleconomy.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
#include "llgl.h"
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
#include "llfocusmgr.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcombobox.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llsliderctrl.h"
|
||||
#include "llspinctrl.h"
|
||||
#include "llviewercontrol.h"
|
||||
@@ -1414,7 +1414,7 @@ void LLSnapshotLivePreview::saveTexture()
|
||||
std::string who_took_it;
|
||||
LLAgentUI::buildFullname(who_took_it);
|
||||
LLAssetStorage::LLStoreAssetCallback callback = &LLSnapshotLivePreview::saveTextureDone;
|
||||
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();
|
||||
saveTextureUserData* user_data = new saveTextureUserData(this, sSnapshotIndex, gSavedSettings.getBOOL("TemporaryUpload"));
|
||||
if (upload_new_resource(tid, // tid
|
||||
LLAssetType::AT_TEXTURE,
|
||||
@@ -1752,7 +1752,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater, bool de
|
||||
{
|
||||
DoutEntering(dc::snapshot, "LLFloaterSnapshot::Impl::updateControls()");
|
||||
const HippoGridInfo& grid(*gHippoGridManager->getConnectedGrid());
|
||||
floater->childSetLabelArg("upload_btn", "[UPLOADFEE]", gSavedSettings.getBOOL("TemporaryUpload") ? (grid.getCurrencySymbol() + '0') : grid.getUploadFee());
|
||||
floater->childSetLabelArg("upload_btn", "[UPLOADFEE]", grid.formatFee(gSavedSettings.getBOOL("TemporaryUpload") ? 0 : LLAgentBenefitsMgr::current().getTextureUploadCost()));
|
||||
|
||||
LLSnapshotLivePreview::ESnapshotType shot_type = (LLSnapshotLivePreview::ESnapshotType)gSavedSettings.getS32("LastSnapshotType");
|
||||
ESnapshotFormat shot_format = (ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat");
|
||||
@@ -1857,7 +1857,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater, bool de
|
||||
{
|
||||
bytes_string = floater->getString("unknown");
|
||||
}
|
||||
S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
S32 upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();
|
||||
floater->childSetLabelArg("texture", "[AMOUNT]", llformat("%d",upload_cost));
|
||||
floater->childSetLabelArg("upload_btn", "[AMOUNT]", llformat("%d",upload_cost));
|
||||
floater->childSetTextArg("file_size_label", "[SIZE]", bytes_string);
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
#include "roles_constants.h"
|
||||
#include "lltransactiontypes.h"
|
||||
#include "llstatusbar.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llfloaterdirectory.h"
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
|
||||
#include "lffloaterinvpanel.h"
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llagentwearables.h"
|
||||
#include "llappearancemgr.h"
|
||||
@@ -6050,7 +6051,7 @@ bool confirm_attachment_rez(const LLSD& notification, const LLSD& response)
|
||||
if (!gAgentAvatarp->canAttachMoreObjects())
|
||||
{
|
||||
LLSD args;
|
||||
args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS);
|
||||
args["MAX_ATTACHMENTS"] = llformat("%d", LLAgentBenefitsMgr::current().getAttachmentLimit());
|
||||
LLNotificationsUtil::add("MaxAttachmentsOnOutfit", args);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#include "lldatapacker.h"
|
||||
#include "llfasttimer.h"
|
||||
#include "llfloaterperms.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llimagej2c.h"
|
||||
#include "llhost.h"
|
||||
#include "llnotificationsutil.h"
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "llwindow.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llavataractions.h"
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llcallingcard.h"
|
||||
@@ -984,23 +985,23 @@ void LLPanelAvatarPicks::processProperties(void* data, EAvatarProcessorType type
|
||||
// are no tabs in the container.
|
||||
tabs->selectFirstTab();
|
||||
bool edit(getPanelAvatar()->isEditable());
|
||||
S32 tab_count = tabs->getTabCount();
|
||||
bool can_add = self && tabs->getTabCount() < LLAgentBenefitsMgr::current().getPicksLimit();
|
||||
LLView* view = getChildView("New...");
|
||||
view->setEnabled(self && tab_count < MAX_AVATAR_PICKS
|
||||
view->setEnabled(can_add
|
||||
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
||||
&& !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC));
|
||||
// [/RLVa:KB]
|
||||
view->setVisible(self && edit);
|
||||
view = getChildView("Delete...");
|
||||
view->setEnabled(self && tab_count);
|
||||
view->setEnabled(can_add);
|
||||
view->setVisible(self && edit);
|
||||
|
||||
//For pick import/export - RK
|
||||
view = getChildView("Import...");
|
||||
view->setVisible(self && edit);
|
||||
view->setEnabled(tab_count < MAX_AVATAR_PICKS);
|
||||
view->setEnabled(can_add);
|
||||
view = getChildView("Export...");
|
||||
view->setEnabled(self && tab_count);
|
||||
view->setEnabled(can_add);
|
||||
view->setVisible(self);
|
||||
|
||||
childSetVisible("loading_text", false);
|
||||
@@ -1022,13 +1023,13 @@ void LLPanelAvatarPicks::onClickNew()
|
||||
panel_pick->initNewPick();
|
||||
tabs->addTabPanel(panel_pick, panel_pick->getPickName());
|
||||
tabs->selectLastTab();
|
||||
S32 tab_count = tabs->getTabCount();
|
||||
getChildView("New...")->setEnabled(tab_count < MAX_AVATAR_PICKS
|
||||
bool can_add = tabs->getTabCount() < LLAgentBenefitsMgr::current().getPicksLimit();
|
||||
getChildView("New...")->setEnabled(can_add
|
||||
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
||||
&& !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC));
|
||||
// [/RLVa:KB]
|
||||
getChildView("Delete...")->setEnabled(true);
|
||||
getChildView("Import...")->setEnabled(tab_count < MAX_AVATAR_PICKS);
|
||||
getChildView("Import...")->setEnabled(can_add);
|
||||
}
|
||||
|
||||
//Pick import and export - RK
|
||||
@@ -1039,17 +1040,17 @@ void LLPanelAvatarPicks::onClickImport()
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelAvatarPicks::onClickImport_continued(void* data, bool import)
|
||||
void LLPanelAvatarPicks::onClickImport_continued(void* data, bool importt)
|
||||
{
|
||||
LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
|
||||
LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
|
||||
if (import && self->mPanelPick)
|
||||
if (importt && self->mPanelPick)
|
||||
{
|
||||
tabs->addTabPanel(self->mPanelPick, self->mPanelPick->getPickName());
|
||||
tabs->selectLastTab();
|
||||
self->childSetEnabled("New...", !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC));
|
||||
self->childSetEnabled("Delete...", false);
|
||||
self->childSetEnabled("Import...", tabs->getTabCount() < MAX_AVATAR_PICKS);
|
||||
self->childSetEnabled("Import...", tabs->getTabCount() < LLAgentBenefitsMgr::current().getPicksLimit());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -251,7 +251,7 @@ private:
|
||||
|
||||
//Pick import and export - RK
|
||||
void onClickImport();
|
||||
static void onClickImport_continued(void* self, bool import);
|
||||
static void onClickImport_continued(void* self, bool importt);
|
||||
void onClickExport();
|
||||
|
||||
bool callbackDelete(const LLSD& notification, const LLSD& response);
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "llpanelgroupgeneral.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "roles_constants.h"
|
||||
|
||||
@@ -182,10 +183,11 @@ BOOL LLPanelGroupGeneral::postBuild()
|
||||
mCtrlOpenEnrollment->setCommitCallback(boost::bind(&LLPanelGroupGeneral::onCommitAny,this));
|
||||
}
|
||||
|
||||
auto& grid = *gHippoGridManager->getConnectedGrid();
|
||||
mCtrlEnrollmentFee = getChild<LLCheckBoxCtrl>("check_enrollment_fee", recurse);
|
||||
if (mCtrlEnrollmentFee)
|
||||
{
|
||||
mCtrlEnrollmentFee->setLabelArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
mCtrlEnrollmentFee->setLabelArg("[CURRENCY]", grid.getCurrencySymbol());
|
||||
mCtrlEnrollmentFee->setCommitCallback(boost::bind(&LLPanelGroupGeneral::onCommitEnrollment,this));
|
||||
}
|
||||
|
||||
@@ -242,7 +244,7 @@ BOOL LLPanelGroupGeneral::postBuild()
|
||||
}
|
||||
|
||||
LLStringUtil::format_map_t args;
|
||||
args["[GROUPCREATEFEE]"] = gHippoGridManager->getConnectedGrid()->getGroupCreationFee();
|
||||
args["[GROUPCREATEFEE]"] = grid.formatFee(LLAgentBenefitsMgr::current().getCreateGroupCost());
|
||||
mIncompleteMemberDataStr = getString("incomplete_member_data_str");
|
||||
mConfirmGroupCreateStr = getString("confirm_group_create_str", args);
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llfirstuse.h"
|
||||
#include "llfiltereditor.h"
|
||||
#include "llinventorybridge.h"
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
#include "llpanelobject.h"
|
||||
|
||||
// linden library includes
|
||||
#include "lleconomy.h"
|
||||
#include "llerror.h"
|
||||
#include "llfontgl.h"
|
||||
#include "llpermissionsflags.h"
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
|
||||
// linden library includes
|
||||
#include "llclickaction.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llerror.h"
|
||||
#include "llfontgl.h"
|
||||
#include "llflexibleobject.h"
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llbutton.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llfloaterinventory.h"
|
||||
#include "llfloaterworldmap.h"
|
||||
#include "lliconctrl.h"
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
// library includes
|
||||
#include "llcachename.h"
|
||||
#include "lldbstrings.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llgl.h"
|
||||
#include "llmediaentry.h"
|
||||
#include "llrender.h"
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
#include "v3math.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llagentwearables.h"
|
||||
#include "llagentpilot.h"
|
||||
@@ -286,6 +287,7 @@ static LLHost gFirstSim;
|
||||
static std::string gFirstSimSeedCap;
|
||||
static LLVector3 gAgentStartLookAt(1.0f, 0.f, 0.f);
|
||||
static std::string gAgentStartLocation = "safe";
|
||||
static bool mBenefitsSuccessfullyInit = false;
|
||||
|
||||
|
||||
boost::scoped_ptr<LLEventPump> LLStartUp::sStateWatcher(new LLEventStream("StartupState"));
|
||||
@@ -316,6 +318,7 @@ void apply_udp_blacklist(const std::string& csv);
|
||||
//bool process_login_success_response(std::string& password);
|
||||
bool process_login_success_response(std::string& password, U32& first_sim_size_x, U32& first_sim_size_y);
|
||||
// </FS:CR> Aurora Sim
|
||||
void on_benefits_failed_callback(const LLSD& notification, const LLSD& response);
|
||||
void transition_back_to_login_panel(const std::string& emsg);
|
||||
|
||||
void callback_cache_name(const LLUUID& id, const std::string& full_name, bool is_group)
|
||||
@@ -2009,7 +2012,7 @@ bool idle_startup()
|
||||
send_complete_agent_movement(regionp->getHost());
|
||||
gAssetStorage->setUpstream(regionp->getHost());
|
||||
gCacheName->setUpstream(regionp->getHost());
|
||||
msg->newMessageFast(_PREHASH_EconomyDataRequest);
|
||||
if (!mBenefitsSuccessfullyInit) msg->newMessageFast(_PREHASH_EconomyDataRequest);
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
display_startup();
|
||||
@@ -2678,6 +2681,11 @@ bool idle_startup()
|
||||
set_startup_status(1.0, LLStringUtil::null, LLStringUtil::null);
|
||||
display_startup();
|
||||
|
||||
if (!mBenefitsSuccessfullyInit && !gHippoGridManager->getConnectedGrid()->isSecondLife())
|
||||
{
|
||||
LLNotificationsUtil::add("FailedToGetBenefits", LLSD(), LLSD(), boost::bind(on_benefits_failed_callback, _1, _2));
|
||||
}
|
||||
|
||||
// Let the map know about the inventory.
|
||||
LLFloaterWorldMap* floater_world_map = gFloaterWorldMap;
|
||||
if(floater_world_map)
|
||||
@@ -3886,10 +3894,70 @@ void apply_udp_blacklist(const std::string& csv)
|
||||
|
||||
}
|
||||
|
||||
void on_benefits_failed_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
LL_WARNS("Benefits") << "Failed to load benefits information" << LL_ENDL;
|
||||
}
|
||||
|
||||
bool init_benefits(LLSD& response)
|
||||
{
|
||||
bool succ = true;
|
||||
|
||||
std::string package_name = response["account_type"].asString();
|
||||
const LLSD& benefits_sd = response["account_level_benefits"];
|
||||
if (!LLAgentBenefitsMgr::init(package_name, benefits_sd) ||
|
||||
!LLAgentBenefitsMgr::initCurrent(package_name, benefits_sd))
|
||||
{
|
||||
succ = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("Benefits") << "Initialized current benefits, level " << package_name << " from " << benefits_sd << LL_ENDL;
|
||||
}
|
||||
const LLSD& packages_sd = response["premium_packages"];
|
||||
for(LLSD::map_const_iterator package_iter = packages_sd.beginMap();
|
||||
package_iter != packages_sd.endMap();
|
||||
++package_iter)
|
||||
{
|
||||
std::string package_name = package_iter->first;
|
||||
const LLSD& benefits_sd = package_iter->second["benefits"];
|
||||
if (LLAgentBenefitsMgr::init(package_name, benefits_sd))
|
||||
{
|
||||
LL_DEBUGS("Benefits") << "Initialized benefits for package " << package_name << " from " << benefits_sd << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Benefits") << "Failed init for package " << package_name << " from " << benefits_sd << LL_ENDL;
|
||||
succ = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!LLAgentBenefitsMgr::has("Base"))
|
||||
{
|
||||
LL_WARNS("Benefits") << "Benefits info did not include required package Base" << LL_ENDL;
|
||||
succ = false;
|
||||
}
|
||||
if (!LLAgentBenefitsMgr::has("Premium"))
|
||||
{
|
||||
LL_WARNS("Benefits") << "Benefits info did not include required package Premium" << LL_ENDL;
|
||||
succ = false;
|
||||
}
|
||||
|
||||
// FIXME PREMIUM - for testing if login does not yet provide Premium Plus. Should be removed thereafter.
|
||||
//if (succ && !LLAgentBenefitsMgr::has("Premium Plus"))
|
||||
//{
|
||||
// LLAgentBenefitsMgr::init("Premium Plus", packages_sd["Premium"]["benefits"]);
|
||||
// llassert(LLAgentBenefitsMgr::has("Premium Plus"));
|
||||
//}
|
||||
return succ;
|
||||
}
|
||||
|
||||
bool process_login_success_response(std::string& password, U32& first_sim_size_x, U32& first_sim_size_y)
|
||||
{
|
||||
LLSD response = LLUserAuth::getInstance()->getResponse();
|
||||
|
||||
mBenefitsSuccessfullyInit = init_benefits(response);
|
||||
|
||||
std::string text(response["udp_blacklist"]);
|
||||
if(!text.empty())
|
||||
{
|
||||
@@ -4112,14 +4180,15 @@ bool process_login_success_response(std::string& password, U32& first_sim_size_x
|
||||
LLWorldMap::gotMapServerURL(true);
|
||||
}
|
||||
|
||||
bool opensim = !gHippoGridManager->getConnectedGrid()->isSecondLife();
|
||||
auto& grid = *gHippoGridManager->getConnectedGrid();
|
||||
bool opensim = !grid.isSecondLife();
|
||||
if (opensim)
|
||||
{
|
||||
std::string web_profile_url = response["web_profile_url"];
|
||||
//if(!web_profile_url.empty()) // Singu Note: We're using this to check if this grid supports web profiles at all, so set empty if empty.
|
||||
gSavedSettings.setString("WebProfileURL", web_profile_url);
|
||||
}
|
||||
else if(!gHippoGridManager->getConnectedGrid()->isInProductionGrid())
|
||||
else if(!grid.isInProductionGrid())
|
||||
{
|
||||
gSavedSettings.setString("WebProfileURL", "https://my-demo.secondlife.com/[AGENT_NAME]");
|
||||
}
|
||||
@@ -4180,34 +4249,34 @@ bool process_login_success_response(std::string& password, U32& first_sim_size_x
|
||||
|
||||
// Override grid info with anything sent in the login response
|
||||
std::string tmp = response["gridname"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setGridName(tmp);
|
||||
if (!tmp.empty()) grid.setGridName(tmp);
|
||||
tmp = response["loginuri"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginUri(tmp);
|
||||
if (!tmp.empty()) grid.setLoginUri(tmp);
|
||||
tmp = response["welcome"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginPage(tmp);
|
||||
if (!tmp.empty()) grid.setLoginPage(tmp);
|
||||
tmp = response["loginpage"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginPage(tmp);
|
||||
if (!tmp.empty()) grid.setLoginPage(tmp);
|
||||
tmp = response["economy"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setHelperUri(tmp);
|
||||
if (!tmp.empty()) grid.setHelperUri(tmp);
|
||||
tmp = response["helperuri"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setHelperUri(tmp);
|
||||
if (!tmp.empty()) grid.setHelperUri(tmp);
|
||||
tmp = response["about"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setWebSite(tmp);
|
||||
if (!tmp.empty()) grid.setWebSite(tmp);
|
||||
tmp = response["website"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setWebSite(tmp);
|
||||
if (!tmp.empty()) grid.setWebSite(tmp);
|
||||
tmp = response["help"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSupportUrl(tmp);
|
||||
if (!tmp.empty()) grid.setSupportUrl(tmp);
|
||||
tmp = response["support"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSupportUrl(tmp);
|
||||
if (!tmp.empty()) grid.setSupportUrl(tmp);
|
||||
tmp = response["register"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRegisterUrl(tmp);
|
||||
if (!tmp.empty()) grid.setRegisterUrl(tmp);
|
||||
tmp = response["account"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRegisterUrl(tmp);
|
||||
if (!tmp.empty()) grid.setRegisterUrl(tmp);
|
||||
tmp = response["password"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setPasswordUrl(tmp);
|
||||
if (!tmp.empty()) grid.setPasswordUrl(tmp);
|
||||
tmp = response["search"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSearchUrl(tmp);
|
||||
else if (opensim) tmp = gHippoGridManager->getConnectedGrid()->getSearchUrl(); // Fallback from grid info response for setting
|
||||
if (!tmp.empty()) grid.setSearchUrl(tmp);
|
||||
else if (opensim) tmp = grid.getSearchUrl(); // Fallback from grid info response for setting
|
||||
if (opensim)
|
||||
{
|
||||
gSavedSettings.setString("SearchURL", tmp); // Singu Note: For web search purposes, always set this setting
|
||||
@@ -4216,32 +4285,31 @@ bool process_login_success_response(std::string& password, U32& first_sim_size_x
|
||||
gMenuBarView->getChildView("Avatar Picker")->setVisible(!tmp.empty());
|
||||
gSavedSettings.setString("DestinationGuideURL", response["destination_guide_url"].asString());
|
||||
tmp = response["classified_fee"].asString();
|
||||
gHippoGridManager->getConnectedGrid()->setClassifiedFee(tmp.empty() ? 0 : atoi(tmp.c_str()));
|
||||
grid.setClassifiedFee(tmp.empty() ? 0 : atoi(tmp.c_str()));
|
||||
}
|
||||
tmp = response["currency"].asString();
|
||||
if (!tmp.empty())
|
||||
{
|
||||
LLTrans::setDefaultArg("[CURRENCY]", tmp);
|
||||
gHippoGridManager->getConnectedGrid()->setCurrencySymbol(tmp);
|
||||
grid.setCurrencySymbol(tmp);
|
||||
}
|
||||
tmp = response["currency_text"].asString();
|
||||
if (!tmp.empty())
|
||||
{
|
||||
LLTrans::setDefaultArg("[CURRENCY_TEXT]", tmp);
|
||||
gHippoGridManager->getConnectedGrid()->setCurrencyText(tmp);
|
||||
grid.setCurrencyText(tmp);
|
||||
}
|
||||
tmp = response["real_currency"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRealCurrencySymbol(tmp);
|
||||
if (!tmp.empty()) grid.setRealCurrencySymbol(tmp);
|
||||
tmp = response["directory_fee"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setDirectoryFee(atoi(tmp.c_str()));
|
||||
tmp = response["max_groups"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setMaxAgentGroups(atoi(tmp.c_str()));
|
||||
tmp = response["max-agent-groups"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setMaxAgentGroups(atoi(tmp.c_str()));
|
||||
if (!tmp.empty()) grid.setDirectoryFee(atoi(tmp.c_str()));
|
||||
if (mBenefitsSuccessfullyInit)
|
||||
tmp = response["VoiceConnector"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setVoiceConnector(tmp);
|
||||
if (!tmp.empty()) grid.setVoiceConnector(tmp);
|
||||
tmp = response["upc_supported"].asString();
|
||||
if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setUPCSupported(true);
|
||||
if (!tmp.empty()) grid.setUPCSupported(true);
|
||||
if (opensim && !mBenefitsSuccessfullyInit)
|
||||
LLAgentBenefitsMgr::instance().initNonSL(response);
|
||||
gHippoGridManager->saveFile();
|
||||
gHippoLimits->setLimits();
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
#include "lffloaterinvpanel.h"
|
||||
#include "lfsimfeaturehandler.h"
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llappearancemgr.h"
|
||||
#include "llagentwearables.h"
|
||||
@@ -681,15 +682,15 @@ void init_menus()
|
||||
gViewerWindow->setMenuBackgroundColor(false,
|
||||
LLViewerLogin::getInstance()->isInProductionGrid());
|
||||
|
||||
// Assume L$10 for now, the server will tell us the real cost at login
|
||||
const std::string upload_cost("10");
|
||||
std::string fee = gHippoGridManager->getConnectedGrid()->getCurrencySymbol() + "10";
|
||||
gMenuHolder->childSetLabelArg("Upload Image", "[UPLOADFEE]", fee);
|
||||
gMenuHolder->childSetLabelArg("Upload Sound", "[UPLOADFEE]", fee);
|
||||
gMenuHolder->childSetLabelArg("Upload Animation", "[UPLOADFEE]", fee);
|
||||
gMenuHolder->childSetLabelArg("Bulk Upload", "[UPLOADFEE]", fee);
|
||||
gMenuHolder->childSetLabelArg("Buy and Sell L$...", "[CURRENCY]",
|
||||
gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
std::string symbol = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
|
||||
auto& benefits = LLAgentBenefitsMgr::current();
|
||||
const std::string texture_upload_cost_str = symbol + std::to_string(benefits.getTextureUploadCost());
|
||||
const std::string sound_upload_cost_str = symbol + std::to_string(benefits.getSoundUploadCost());
|
||||
const std::string animation_upload_cost_str = symbol + std::to_string(benefits.getAnimationUploadCost());
|
||||
gMenuHolder->childSetLabelArg("Upload Image", "[UPLOADFEE]", texture_upload_cost_str);
|
||||
gMenuHolder->childSetLabelArg("Upload Sound", "[UPLOADFEE]", sound_upload_cost_str);
|
||||
gMenuHolder->childSetLabelArg("Upload Animation", "[UPLOADFEE]", animation_upload_cost_str);
|
||||
gMenuHolder->childSetLabelArg("Buy and Sell L$...", "[CURRENCY]", symbol);
|
||||
|
||||
gAFKMenu = gMenuBarView->getChild<LLMenuItemCallGL>("Set Away", TRUE);
|
||||
gBusyMenu = gMenuBarView->getChild<LLMenuItemCallGL>("Set Busy", TRUE);
|
||||
@@ -8876,6 +8877,43 @@ class LLWorldEnableEnvSettings final : public view_listener_t
|
||||
}
|
||||
};
|
||||
|
||||
class LLUploadCostCalculator final : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
|
||||
{
|
||||
auto& asset_type_str = userdata["data"].asStringRef();
|
||||
S32 upload_cost = -1;
|
||||
LLView* view;
|
||||
|
||||
if (asset_type_str == "texture")
|
||||
{
|
||||
upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();
|
||||
view = gMenuHolder->findChild<LLView>("Upload Image");
|
||||
}
|
||||
else if (asset_type_str == "animation")
|
||||
{
|
||||
upload_cost = LLAgentBenefitsMgr::current().getAnimationUploadCost();
|
||||
view = gMenuHolder->findChild<LLView>("Upload Animation");
|
||||
}
|
||||
else if (asset_type_str == "sound")
|
||||
{
|
||||
upload_cost = LLAgentBenefitsMgr::current().getSoundUploadCost();
|
||||
view = gMenuHolder->findChild<LLView>("Upload Sound");
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Unable to find upload cost for asset_type_str " << asset_type_str << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
auto ctrl = gMenuHolder->findControl(userdata["control"].asString());
|
||||
ctrl->setValue(gStatusBar && gStatusBar->getBalance() >= upload_cost);
|
||||
view->setLabelArg("[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->formatFee(upload_cost));
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// TPV listeners go below here
|
||||
class SinguCloseAllDialogs final : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) override
|
||||
@@ -10013,6 +10051,8 @@ void initialize_menus()
|
||||
bool mMult;
|
||||
};
|
||||
|
||||
addMenu(new LLUploadCostCalculator(), "Upload.CalculateCosts");
|
||||
|
||||
// File menu
|
||||
init_menu_file();
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
// project includes
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "statemachine/aifilepicker.h"
|
||||
#include "llfloaterbvhpreview.h"
|
||||
@@ -68,7 +69,6 @@
|
||||
|
||||
// linden libraries
|
||||
#include "llassetuploadresponders.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llhttpclient.h"
|
||||
#include "llmemberlistener.h"
|
||||
#include "llnotificationsutil.h"
|
||||
@@ -119,17 +119,6 @@ class LLFileEnableSaveAs : public view_listener_t
|
||||
}
|
||||
};
|
||||
|
||||
class LLFileEnableUpload : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
bool new_value = gStatusBar && LLGlobalEconomy::Singleton::getInstance() &&
|
||||
gStatusBar->getBalance() >= LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class LLFileEnableUploadModel : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
@@ -416,9 +405,7 @@ class LLFileUploadBulk : public view_listener_t
|
||||
}
|
||||
else
|
||||
{
|
||||
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
const char* notification_type = expected_upload_cost ? "BulkTemporaryUpload" : "BulkTemporaryUploadFree";
|
||||
LLNotificationsUtil::add(notification_type, LLSD().with("UPLOADCOST", grid->getUploadFee()), LLSD(), onConfirmBulkUploadTemp);
|
||||
LLNotificationsUtil::add("BulkTemporaryUpload", LLSD(), LLSD(), onConfirmBulkUploadTemp);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -465,7 +452,6 @@ class LLFileUploadBulk : public view_listener_t
|
||||
|
||||
std::string display_name = LLStringUtil::null;
|
||||
LLAssetStorage::LLStoreAssetCallback callback = NULL;
|
||||
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
void *userdata = NULL;
|
||||
gSavedSettings.setBOOL("TemporaryUpload", enabled);
|
||||
upload_new_resource(
|
||||
@@ -480,7 +466,7 @@ class LLFileUploadBulk : public view_listener_t
|
||||
LLFloaterPerms::getEveryonePerms("Uploads"),
|
||||
display_name,
|
||||
callback,
|
||||
expected_upload_cost,
|
||||
0,
|
||||
userdata);
|
||||
|
||||
}
|
||||
@@ -925,6 +911,9 @@ void upload_new_resource(const std::string& src_filename, std::string name,
|
||||
error = TRUE;;
|
||||
}
|
||||
|
||||
// Now that we've determined the type, figure out the cost
|
||||
if (!error) LLAgentBenefitsMgr::current().findUploadCost(asset_type, expected_upload_cost);
|
||||
|
||||
// gen a new transaction ID for this asset
|
||||
tid.generate();
|
||||
|
||||
@@ -1396,7 +1385,6 @@ void init_menu_file()
|
||||
(new LLFileSavePreview())->registerListener(gMenuHolder, "File.SavePreview");
|
||||
(new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk");
|
||||
(new LLFileQuit())->registerListener(gMenuHolder, "File.Quit");
|
||||
(new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload");
|
||||
(new LLFileEnableUploadModel())->registerListener(gMenuHolder, "File.EnableUploadModel");
|
||||
|
||||
(new LLFileEnableSaveAs())->registerListener(gMenuHolder, "File.EnableSaveAs");
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
#include "llavatarnamecache.h"
|
||||
#include "llcororesponder.h"
|
||||
#include "../lscript/lscript_byteformat.h" //Need LSCRIPTRunTimePermissionBits and SCRIPT_PERMISSION_*
|
||||
#include "lleconomy.h"
|
||||
#include "llfocusmgr.h"
|
||||
#include "llfollowcamparams.h"
|
||||
#include "llinventorydefines.h"
|
||||
@@ -54,6 +53,7 @@
|
||||
#include "mean_collision_data.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentbenefits.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llcallingcard.h"
|
||||
#include "llcontrolavatar.h"
|
||||
@@ -735,7 +735,7 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
|
||||
if (option == 0 && !group_id.isNull())
|
||||
{
|
||||
// check for promotion or demotion.
|
||||
S32 max_groups = gHippoLimits->getMaxAgentGroups();
|
||||
S32 max_groups = LLAgentBenefitsMgr::current().getGroupMembershipLimit();
|
||||
if (gAgent.isInGroup(group_id)) ++max_groups;
|
||||
|
||||
if ((S32)gAgent.mGroups.size() < max_groups)
|
||||
@@ -5768,19 +5768,9 @@ void process_frozen_message(LLMessageSystem* msgsystem, void** user_data)
|
||||
// do some extra stuff once we get our economy data
|
||||
void process_economy_data(LLMessageSystem* msg, void** /*user_data*/)
|
||||
{
|
||||
LLGlobalEconomy::processEconomyData(msg, LLGlobalEconomy::Singleton::getInstance());
|
||||
|
||||
S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
|
||||
LL_INFOS_ONCE("Messaging") << "EconomyData message arrived; upload cost is L$" << upload_cost << LL_ENDL;
|
||||
|
||||
std::string fee = gHippoGridManager->getConnectedGrid()->getUploadFee();
|
||||
gMenuHolder->childSetLabelArg("Upload Image", "[UPLOADFEE]", fee);
|
||||
gMenuHolder->childSetLabelArg("Upload Sound", "[UPLOADFEE]", fee);
|
||||
gMenuHolder->childSetLabelArg("Upload Animation", "[UPLOADFEE]", fee);
|
||||
gMenuHolder->childSetLabelArg("Bulk Upload", "[UPLOADFEE]", fee);
|
||||
gMenuHolder->childSetLabelArg("Buy and Sell L$...", "[CURRENCY]",
|
||||
gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
auto& grid = *gHippoGridManager->getConnectedGrid();
|
||||
if (grid.isSecondLife() || !LLAgentBenefitsMgr::isCurrent("NonSL")) return; // Quick hack to allow other grids benefits management
|
||||
LLAgentBenefitsMgr::current().processEconomyData(msg);
|
||||
}
|
||||
|
||||
void notify_cautioned_script_question(const LLSD& notification, const LLSD& response, S32 orig_questions, BOOL granted)
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
|
||||
#include "llcallbacklist.h"
|
||||
#include "lldir.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llhttpclient.h"
|
||||
#include "llinventorydefines.h"
|
||||
#include "llimagej2c.h"
|
||||
|
||||
@@ -2072,6 +2072,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
||||
capabilityNames.append("UploadBakedTexture");
|
||||
capabilityNames.append("UserInfo");
|
||||
capabilityNames.append("ViewerAsset");
|
||||
capabilityNames.append("ViewerBenefits");
|
||||
capabilityNames.append("ViewerMetrics");
|
||||
capabilityNames.append("ViewerStartAuction");
|
||||
capabilityNames.append("ViewerStats");
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "raytrace.h"
|
||||
|
||||
#include "llagent.h" // Get state values from here
|
||||
#include "llagentbenefits.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llagentwearables.h"
|
||||
#include "llanimationstates.h"
|
||||
@@ -1131,7 +1132,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
||||
mCCSChatTextOverride(false)
|
||||
// </edit>
|
||||
{
|
||||
mAttachedObjectsVector.reserve(MAX_AGENT_ATTACHMENTS);
|
||||
mAttachedObjectsVector.reserve(38);
|
||||
|
||||
static LLCachedControl<bool> const freeze_time("FreezeTime", false);
|
||||
mFreezeTimeLangolier = freeze_time;
|
||||
@@ -7808,7 +7809,7 @@ U32 LLVOAvatar::getNumAttachments() const
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLVOAvatar::canAttachMoreObjects(U32 n) const
|
||||
{
|
||||
return (getNumAttachments() + n) <= MAX_AGENT_ATTACHMENTS;
|
||||
return (getNumAttachments() + n) <= (U32)LLAgentBenefitsMgr::current().getAttachmentLimit();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -7833,24 +7834,9 @@ U32 LLVOAvatar::getNumAnimatedObjectAttachments() const
|
||||
//-----------------------------------------------------------------------------
|
||||
U32 LLVOAvatar::getMaxAnimatedObjectAttachments() const
|
||||
{
|
||||
U32 max_attach = 0;
|
||||
if (gSavedSettings.getBOOL("AnimatedObjectsIgnoreLimits"))
|
||||
{
|
||||
max_attach = MAX_AGENT_ATTACHMENTS;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gAgent.getRegion())
|
||||
{
|
||||
LLSD features;
|
||||
gAgent.getRegion()->getSimulatorFeatures(features);
|
||||
if (features.has("AnimatedObjects"))
|
||||
{
|
||||
max_attach = (U32)llmax(0,features["AnimatedObjects"]["MaxAgentAnimatedObjectAttachments"].asInteger());
|
||||
}
|
||||
}
|
||||
}
|
||||
return max_attach;
|
||||
return U32_MAX;
|
||||
return LLAgentBenefitsMgr::current().getAnimatedObjectLimit();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<menu_item_call label="Sound ([UPLOADFEE])..." name="Upload Sound"/>
|
||||
<menu_item_call label="Animation ([UPLOADFEE])..." name="Upload Animation"/>
|
||||
<menu_item_call label="Mesh hochladen" name="Upload Mesh"/>
|
||||
<menu_item_call label="Massen ([UPLOADFEE] je Datei)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Massen (je Datei)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Importiere XML" name="Import"/>
|
||||
<menu_item_call label="Importiere mit Texturen" name="Import2"/>
|
||||
<menu_item_call label="Ändere lokale Texturen" name="Change Local Textures"/>
|
||||
|
||||
@@ -8,24 +8,24 @@
|
||||
<menu_item_call enabled="true" label="Upload Image ([UPLOADFEE])..."
|
||||
mouse_opaque="true" name="Upload Image" shortcut="control|U" >
|
||||
<on_click function="File.UploadImage" userdata="" />
|
||||
<on_enable function="File.EnableUpload" />
|
||||
<on_enable function="Upload.CalculateCosts" userdata="texture"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Upload Sound ([UPLOADFEE])..." name="Upload Sound"
|
||||
mouse_opaque="true" enabled="true" >
|
||||
<on_click function="File.UploadSound" userdata="" />
|
||||
<on_enable function="File.EnableUpload" />
|
||||
<on_enable function="Upload.CalculateCosts" userdata="sound"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Upload Animation ([UPLOADFEE])..." name="Upload Animation"
|
||||
mouse_opaque="true" enabled="true" >
|
||||
<on_click function="File.UploadAnim" userdata="" />
|
||||
<on_enable function="File.EnableUpload" />
|
||||
<on_enable function="Upload.CalculateCosts" userdata="animation"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Upload Mesh..." name="Upload Mesh"
|
||||
mouse_opaque="true" enabled="true" >
|
||||
<on_click function="File.UploadModel" userdata="" />
|
||||
<on_enable function="File.EnableUploadModel" />
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Bulk Upload ([UPLOADFEE] per file)..." name="Bulk Upload"
|
||||
<menu_item_call label="Bulk Upload (Costs per file)..." name="Bulk Upload"
|
||||
mouse_opaque="true" enabled="true" >
|
||||
<on_click function="File.UploadBulk" userdata="" />
|
||||
</menu_item_call>
|
||||
|
||||
@@ -996,7 +996,7 @@ You do not have enough [CURRENCY] to join this group.
|
||||
icon="alertmodal.tga"
|
||||
name="CreateGroupCost"
|
||||
type="alertmodal">
|
||||
Creating this group will cost L$[COST].
|
||||
Creating this group will cost [COST].
|
||||
Groups need more than one member, or they are deleted forever.
|
||||
Please invite members within 48 hours.
|
||||
<tag>group</tag>
|
||||
@@ -1005,7 +1005,7 @@ Please invite members within 48 hours.
|
||||
canceltext="Cancel"
|
||||
name="okcancelbuttons"
|
||||
notext="Cancel"
|
||||
yestext="Create group for L$[COST]"/>
|
||||
yestext="Create group for [COST]"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
@@ -8800,6 +8800,15 @@ Server Error: Media update or get failed.
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="FailedToGetBenefits"
|
||||
type="alertmodal">
|
||||
Unfortunately, we were unable to get benefits information for this session. This should not happen in a normal production environment. Please contact support. This session will not work normally and we recommend that you restart.
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="ShareNotification"
|
||||
@@ -11424,19 +11433,7 @@ AntiSpam: Blocked newline flood from secondlife:///app/agent/[SOURCE]/about (ove
|
||||
type="alertmodal">
|
||||
Would you like to bulk upload the files as temporary files?
|
||||
|
||||
WARNING: Each upload costs [UPLOADCOST] if it's not temporary
|
||||
<usetemplate
|
||||
name="yesnocancelbuttons"
|
||||
notext="Permanent"
|
||||
yestext="Temporary"
|
||||
canceltext="Cancel"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="BulkTemporaryUploadFree"
|
||||
type="alertmodal">
|
||||
Would you like to bulk upload the files as temporary files?
|
||||
WARNING: Each upload will cost its normal price, if it's not temporary
|
||||
<usetemplate
|
||||
name="yesnocancelbuttons"
|
||||
notext="Permanent"
|
||||
|
||||
@@ -4730,6 +4730,12 @@ Abuse Report</string>
|
||||
|
||||
<string name="Chat">Chat</string>
|
||||
|
||||
<!-- SL Membership -->
|
||||
<string name="BaseMembership">Base</string>
|
||||
<string name="PremiumMembership">Premium</string>
|
||||
<string name="Premium PlusMembership">Premium Plus</string>
|
||||
<string name="InternalMembership">Internal</string> <!-- No need to translate -->
|
||||
|
||||
<!-- External editor status codes -->
|
||||
<string name="ExternalEditorNotSet">Select an editor using the ExternalEditor setting.</string>
|
||||
<string name="ExternalEditorNotFound">Cannot find the external editor you specified.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<menu_item_call label="Subir Sonido ([UPLOADFEE])..." name="Upload Sound"/>
|
||||
<menu_item_call label="Subir Animación ([UPLOADFEE])..." name="Upload Animation"/>
|
||||
<menu_item_call label="Subir Modelo..." name="Upload Mesh"/>
|
||||
<menu_item_call label="Subir Masivo ([UPLOADFEE] por archivo)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Subir Masivo (por archivo)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Importar Objeto XML" name="Import"/>
|
||||
<menu_item_call label="Importar con Texturas" name="Import2"/>
|
||||
<menu_item_call label="Cambiar Texturas Locales" name="Change Local Textures"/>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<menu_item_call label="Import de son ([UPLOADFEE])" name="Upload Sound"/>
|
||||
<menu_item_call label="Import d'animation ([UPLOADFEE])" name="Upload Animation"/>
|
||||
<menu_item_call label="Import de Mesh" name="Upload Mesh"/>
|
||||
<menu_item_call label="Import multiples ([UPLOADFEE] par fichier)" name="Bulk Upload"/>
|
||||
<menu_item_call label="Import multiples (par fichier)" name="Bulk Upload"/>
|
||||
<menu_item_call label="Import XML" name="Import"/>
|
||||
<menu_item_call label="Import avec textures" name="Import2"/>
|
||||
<menu_item_call label="Changer les textures locales" name="Change Local Textures"/>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<menu_item_call label="Immagine ([COST]L$)..." name="Upload Image"/>
|
||||
<menu_item_call label="Suono ([COST]L$)..." name="Upload Sound"/>
|
||||
<menu_item_call label="Animazione ([COST]L$)..." name="Upload Animation"/>
|
||||
<menu_item_call label="Multiplo ([COST]L$ per file)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Multiplo (per file)..." name="Bulk Upload"/>
|
||||
<menu_item_separator label="-----------" name="separator"/>
|
||||
<menu_item_call label="Imposta i permessi di base..." name="perm prefs"/>
|
||||
</menu>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<menu_item_call label="Imagem ([UPLOADFEE])..." name="Upload Image"/>
|
||||
<menu_item_call label="Som ([UPLOADFEE])..." name="Upload Sound"/>
|
||||
<menu_item_call label="Animação ([UPLOADFEE])..." name="Upload Animation"/>
|
||||
<menu_item_call label="Bulk ([UPLOADFEE] por arquivo)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Bulk (por arquivo)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Definir Permissões Padrão..." name="perm prefs"/>
|
||||
<menu_item_call label="Fechar janela" name="Close Window"/>
|
||||
<menu_item_call label="Fechar todas as janelas" name="Close All Windows"/>
|
||||
|
||||
Reference in New Issue
Block a user