lleconomy.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:9k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lleconomy.cpp
  3.  *
  4.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  5.  * 
  6.  * Copyright (c) 2002-2010, Linden Research, Inc.
  7.  * 
  8.  * Second Life Viewer Source Code
  9.  * The source code in this file ("Source Code") is provided by Linden Lab
  10.  * to you under the terms of the GNU General Public License, version 2.0
  11.  * ("GPL"), unless you have obtained a separate licensing agreement
  12.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  13.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  14.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  15.  * 
  16.  * There are special exceptions to the terms and conditions of the GPL as
  17.  * it is applied to this Source Code. View the full text of the exception
  18.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  19.  * online at
  20.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  21.  * 
  22.  * By copying, modifying or distributing this software, you acknowledge
  23.  * that you have read and understood your obligations described above,
  24.  * and agree to abide by those obligations.
  25.  * 
  26.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  27.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  28.  * COMPLETENESS OR PERFORMANCE.
  29.  * $/LicenseInfo$
  30.  */
  31. #include "linden_common.h"
  32. #include "lleconomy.h"
  33. #include "llerror.h"
  34. #include "message.h"
  35. #include "v3math.h"
  36. LLGlobalEconomy::LLGlobalEconomy()
  37. : mObjectCount( -1 ),
  38. mObjectCapacity( -1 ),
  39. mPriceObjectClaim( -1 ),
  40. mPricePublicObjectDecay( -1 ),
  41. mPricePublicObjectDelete( -1 ),
  42. mPriceEnergyUnit( -1 ),
  43. mPriceUpload( -1 ),
  44. mPriceRentLight( -1 ),
  45. mTeleportMinPrice( -1 ),
  46. mTeleportPriceExponent( -1 ),
  47. mPriceGroupCreate( -1 )
  48. { }
  49. LLGlobalEconomy::~LLGlobalEconomy()
  50. { }
  51. // static
  52. void LLGlobalEconomy::processEconomyData(LLMessageSystem *msg, LLGlobalEconomy* econ_data)
  53. {
  54. S32 i;
  55. F32 f;
  56. msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCapacity, i);
  57. econ_data->setObjectCapacity(i);
  58. msg->getS32Fast(_PREHASH_Info, _PREHASH_ObjectCount, i);
  59. econ_data->setObjectCount(i);
  60. msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceEnergyUnit, i);
  61. econ_data->setPriceEnergyUnit(i);
  62. msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceObjectClaim, i);
  63. econ_data->setPriceObjectClaim(i);
  64. msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDecay, i);
  65. econ_data->setPricePublicObjectDecay(i);
  66. msg->getS32Fast(_PREHASH_Info, _PREHASH_PricePublicObjectDelete, i);
  67. econ_data->setPricePublicObjectDelete(i);
  68. msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceUpload, i);
  69. econ_data->setPriceUpload(i);
  70. #if LL_LINUX
  71. // We can optionally fake the received upload price for testing.
  72. // Note that the server is within its rights to not obey our fake
  73. // price. :)
  74. const char* fakeprice_str = getenv("LL_FAKE_UPLOAD_PRICE");
  75. if (fakeprice_str)
  76. {
  77. S32 fakeprice = (S32)atoi(fakeprice_str);
  78. llwarns << "LL_FAKE_UPLOAD_PRICE: Faking upload price as L$" << fakeprice << llendl;
  79. econ_data->setPriceUpload(fakeprice);
  80. }
  81. #endif
  82. msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceRentLight, i);
  83. econ_data->setPriceRentLight(i);
  84. msg->getS32Fast(_PREHASH_Info, _PREHASH_TeleportMinPrice, i);
  85. econ_data->setTeleportMinPrice(i);
  86. msg->getF32Fast(_PREHASH_Info, _PREHASH_TeleportPriceExponent, f);
  87. econ_data->setTeleportPriceExponent(f);
  88. msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceGroupCreate, i);
  89. econ_data->setPriceGroupCreate(i);
  90. }
  91. S32 LLGlobalEconomy::calculateTeleportCost(F32 distance) const
  92. {
  93. S32 min_cost = getTeleportMinPrice();
  94. F32 exponent = getTeleportPriceExponent();
  95. F32 divisor = 100.f * pow(3.f, exponent);
  96. S32 cost = (U32)(distance * pow(log10(distance), exponent) / divisor);
  97. if (cost < 0)
  98. {
  99. cost = 0;
  100. }
  101. else if (cost < min_cost)
  102. {
  103. cost = min_cost;
  104. }
  105. return cost;
  106. }
  107. S32 LLGlobalEconomy::calculateLightRent(const LLVector3& object_size) const
  108. {
  109. F32 intensity_mod = llmax(object_size.magVec(), 1.f);
  110. return (S32)(intensity_mod * getPriceRentLight());
  111. }
  112. void LLGlobalEconomy::print()
  113. {
  114. llinfos << "Global Economy Settings: " << llendl;
  115. llinfos << "Object Capacity: " << mObjectCapacity << llendl;
  116. llinfos << "Object Count: " << mObjectCount << llendl;
  117. llinfos << "Claim Price Per Object: " << mPriceObjectClaim << llendl;
  118. llinfos << "Claim Price Per Public Object: " << mPricePublicObjectDecay << llendl;
  119. llinfos << "Delete Price Per Public Object: " << mPricePublicObjectDelete << llendl;
  120. llinfos << "Release Price Per Public Object: " << getPricePublicObjectRelease() << llendl;
  121. llinfos << "Price Per Energy Unit: " << mPriceEnergyUnit << llendl;
  122. llinfos << "Price Per Upload: " << mPriceUpload << llendl;
  123. llinfos << "Light Base Price: " << mPriceRentLight << llendl;
  124. llinfos << "Teleport Min Price: " << mTeleportMinPrice << llendl;
  125. llinfos << "Teleport Price Exponent: " << mTeleportPriceExponent << llendl;
  126. llinfos << "Price for group creation: " << mPriceGroupCreate << llendl;
  127. }
  128. LLRegionEconomy::LLRegionEconomy()
  129. : LLGlobalEconomy(),
  130. mPriceObjectRent( -1.f ),
  131. mPriceObjectScaleFactor( -1.f ),
  132. mEnergyEfficiency( -1.f ),
  133. mBasePriceParcelClaimDefault(-1),
  134. mBasePriceParcelClaimActual(-1),
  135. mPriceParcelClaimFactor(-1.f),
  136. mBasePriceParcelRent(-1),
  137. mAreaOwned(-1.f),
  138. mAreaTotal(-1.f)
  139. { }
  140. LLRegionEconomy::~LLRegionEconomy()
  141. { }
  142. BOOL LLRegionEconomy::hasData() const
  143. {
  144. return (mBasePriceParcelRent != -1);
  145. }
  146. // static
  147. void LLRegionEconomy::processEconomyData(LLMessageSystem *msg, void** user_data)
  148. {
  149. S32 i;
  150. F32 f;
  151. LLRegionEconomy *this_ptr = (LLRegionEconomy*)user_data;
  152. LLGlobalEconomy::processEconomyData(msg, this_ptr);
  153. msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceParcelClaim, i);
  154. this_ptr->setBasePriceParcelClaimDefault(i);
  155. msg->getF32(_PREHASH_Info, _PREHASH_PriceParcelClaimFactor, f);
  156. this_ptr->setPriceParcelClaimFactor(f);
  157. msg->getF32Fast(_PREHASH_Info, _PREHASH_EnergyEfficiency, f);
  158. this_ptr->setEnergyEfficiency(f);
  159. msg->getF32Fast(_PREHASH_Info, _PREHASH_PriceObjectRent, f);
  160. this_ptr->setPriceObjectRent(f);
  161. msg->getF32Fast(_PREHASH_Info, _PREHASH_PriceObjectScaleFactor, f);
  162. this_ptr->setPriceObjectScaleFactor(f);
  163. msg->getS32Fast(_PREHASH_Info, _PREHASH_PriceParcelRent, i);
  164. this_ptr->setBasePriceParcelRent(i);
  165. }
  166. // static
  167. void LLRegionEconomy::processEconomyDataRequest(LLMessageSystem *msg, void **user_data)
  168. {
  169. LLRegionEconomy *this_ptr = (LLRegionEconomy*)user_data;
  170. if (!this_ptr->hasData())
  171. {
  172. llwarns << "Dropping EconomyDataRequest, because EconomyData message "
  173. << "has not been processed" << llendl;
  174. }
  175. msg->newMessageFast(_PREHASH_EconomyData);
  176. msg->nextBlockFast(_PREHASH_Info);
  177. msg->addS32Fast(_PREHASH_ObjectCapacity, this_ptr->getObjectCapacity());
  178. msg->addS32Fast(_PREHASH_ObjectCount, this_ptr->getObjectCount());
  179. msg->addS32Fast(_PREHASH_PriceEnergyUnit, this_ptr->getPriceEnergyUnit());
  180. msg->addS32Fast(_PREHASH_PriceObjectClaim, this_ptr->getPriceObjectClaim());
  181. msg->addS32Fast(_PREHASH_PricePublicObjectDecay, this_ptr->getPricePublicObjectDecay());
  182. msg->addS32Fast(_PREHASH_PricePublicObjectDelete, this_ptr->getPricePublicObjectDelete());
  183. msg->addS32Fast(_PREHASH_PriceParcelClaim, this_ptr->mBasePriceParcelClaimActual);
  184. msg->addF32Fast(_PREHASH_PriceParcelClaimFactor, this_ptr->mPriceParcelClaimFactor);
  185. msg->addS32Fast(_PREHASH_PriceUpload, this_ptr->getPriceUpload());
  186. msg->addS32Fast(_PREHASH_PriceRentLight, this_ptr->getPriceRentLight());
  187. msg->addS32Fast(_PREHASH_TeleportMinPrice, this_ptr->getTeleportMinPrice());
  188. msg->addF32Fast(_PREHASH_TeleportPriceExponent, this_ptr->getTeleportPriceExponent());
  189. msg->addF32Fast(_PREHASH_EnergyEfficiency, this_ptr->getEnergyEfficiency());
  190. msg->addF32Fast(_PREHASH_PriceObjectRent, this_ptr->getPriceObjectRent());
  191. msg->addF32Fast(_PREHASH_PriceObjectScaleFactor, this_ptr->getPriceObjectScaleFactor());
  192. msg->addS32Fast(_PREHASH_PriceParcelRent, this_ptr->getPriceParcelRent());
  193. msg->addS32Fast(_PREHASH_PriceGroupCreate, this_ptr->getPriceGroupCreate());
  194. msg->sendReliable(msg->getSender());
  195. }
  196. S32 LLRegionEconomy::getPriceParcelClaim() const
  197. {
  198. //return (S32)((F32)mBasePriceParcelClaim * (mAreaTotal / (mAreaTotal - mAreaOwned)));
  199. return (S32)((F32)mBasePriceParcelClaimActual * mPriceParcelClaimFactor);
  200. }
  201. S32 LLRegionEconomy::getPriceParcelRent() const
  202. {
  203. return mBasePriceParcelRent;
  204. }
  205. void LLRegionEconomy::print()
  206. {
  207. this->LLGlobalEconomy::print();
  208. llinfos << "Region Economy Settings: " << llendl;
  209. llinfos << "Land (square meters): " << mAreaTotal << llendl;
  210. llinfos << "Owned Land (square meters): " << mAreaOwned << llendl;
  211. llinfos << "Daily Object Rent: " << mPriceObjectRent << llendl;
  212. llinfos << "Daily Land Rent (per meter): " << getPriceParcelRent() << llendl;
  213. llinfos << "Energey Efficiency: " << mEnergyEfficiency << llendl;
  214. }
  215. void LLRegionEconomy::setBasePriceParcelClaimDefault(S32 val)
  216. {
  217. mBasePriceParcelClaimDefault = val;
  218. if(mBasePriceParcelClaimActual == -1)
  219. {
  220. mBasePriceParcelClaimActual = val;
  221. }
  222. }
  223. void LLRegionEconomy::setBasePriceParcelClaimActual(S32 val)
  224. {
  225. mBasePriceParcelClaimActual = val;
  226. }
  227. void LLRegionEconomy::setPriceParcelClaimFactor(F32 val)
  228. {
  229. mPriceParcelClaimFactor = val;
  230. }
  231. void LLRegionEconomy::setBasePriceParcelRent(S32 val)
  232. {
  233. mBasePriceParcelRent = val;
  234. }