RegionSettings.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. /*
  2. * Copyright (c) Contributors, http://opensimulator.org/
  3. * See CONTRIBUTORS.TXT for a full list of copyright holders.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions are met:
  7. * * Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * * Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * * Neither the name of the OpenSim Project nor the
  13. * names of its contributors may be used to endorse or promote products
  14. * derived from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
  17. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  18. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  19. * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
  20. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  21. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  22. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  23. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  24. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  25. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26. */
  27. using System;
  28. using System.IO;
  29. using OpenMetaverse;
  30. namespace OpenSim.Framework
  31. {
  32. public class RegionSettings
  33. {
  34. private ConfigurationMember configMember;
  35. public delegate void SaveDelegate(RegionSettings rs);
  36. public event SaveDelegate OnSave;
  37. public RegionSettings()
  38. {
  39. if (configMember == null)
  40. {
  41. try
  42. {
  43. configMember = new ConfigurationMember(Path.Combine(Util.configDir(), "estate_settings.xml"), "ESTATE SETTINGS", LoadConfigurationOptions, HandleIncomingConfiguration, true);
  44. configMember.performConfigurationRetrieve();
  45. }
  46. catch (Exception)
  47. {
  48. }
  49. }
  50. }
  51. public void LoadConfigurationOptions()
  52. {
  53. configMember.addConfigurationOption("region_flags",
  54. ConfigurationOption.ConfigurationTypes.TYPE_UINT32,
  55. String.Empty, "336723974", true);
  56. configMember.addConfigurationOption("max_agents",
  57. ConfigurationOption.ConfigurationTypes.TYPE_INT32,
  58. String.Empty, "40", true);
  59. configMember.addConfigurationOption("object_bonus_factor",
  60. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  61. String.Empty, "1.0", true);
  62. configMember.addConfigurationOption("sim_access",
  63. ConfigurationOption.ConfigurationTypes.TYPE_INT32,
  64. String.Empty, "21", true);
  65. configMember.addConfigurationOption("terrain_base_0",
  66. ConfigurationOption.ConfigurationTypes.TYPE_UUID,
  67. String.Empty, "b8d3965a-ad78-bf43-699b-bff8eca6c975",true);
  68. configMember.addConfigurationOption("terrain_base_1",
  69. ConfigurationOption.ConfigurationTypes.TYPE_UUID,
  70. String.Empty, "abb783e6-3e93-26c0-248a-247666855da3",true);
  71. configMember.addConfigurationOption("terrain_base_2",
  72. ConfigurationOption.ConfigurationTypes.TYPE_UUID,
  73. String.Empty, "179cdabd-398a-9b6b-1391-4dc333ba321f",true);
  74. configMember.addConfigurationOption("terrain_base_3",
  75. ConfigurationOption.ConfigurationTypes.TYPE_UUID,
  76. String.Empty, "beb169c7-11ea-fff2-efe5-0f24dc881df2",true);
  77. configMember.addConfigurationOption("terrain_start_height_0",
  78. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  79. String.Empty, "10.0", true);
  80. configMember.addConfigurationOption("terrain_start_height_1",
  81. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  82. String.Empty, "10.0", true);
  83. configMember.addConfigurationOption("terrain_start_height_2",
  84. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  85. String.Empty, "10.0", true);
  86. configMember.addConfigurationOption("terrain_start_height_3",
  87. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  88. String.Empty, "10.0", true);
  89. configMember.addConfigurationOption("terrain_height_range_0",
  90. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  91. String.Empty, "60.0", true);
  92. configMember.addConfigurationOption("terrain_height_range_1",
  93. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  94. String.Empty, "60.0", true);
  95. configMember.addConfigurationOption("terrain_height_range_2",
  96. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  97. String.Empty, "60.0", true);
  98. configMember.addConfigurationOption("terrain_height_range_3",
  99. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  100. String.Empty, "60.0", true);
  101. configMember.addConfigurationOption("region_water_height",
  102. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  103. String.Empty, "20.0", true);
  104. configMember.addConfigurationOption("terrain_raise_limit",
  105. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  106. String.Empty, "100.0", true);
  107. configMember.addConfigurationOption("terrain_lower_limit",
  108. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  109. String.Empty, "-100.0", true);
  110. configMember.addConfigurationOption("sun_hour",
  111. ConfigurationOption.ConfigurationTypes.TYPE_DOUBLE,
  112. String.Empty, "0.0", true);
  113. }
  114. public bool HandleIncomingConfiguration(string key, object value)
  115. {
  116. switch (key)
  117. {
  118. case "region_flags":
  119. RegionFlags flags = (RegionFlags)(uint)value;
  120. m_BlockTerraform =
  121. (flags & RegionFlags.BlockTerraform) != 0;
  122. m_BlockFly =
  123. (flags & RegionFlags.NoFly) != 0;
  124. m_AllowDamage =
  125. (flags & RegionFlags.AllowDamage) != 0;
  126. m_RestrictPushing =
  127. (flags & RegionFlags.RestrictPushObject) != 0;
  128. m_AllowLandResell =
  129. (flags & RegionFlags.BlockLandResell) == 0;
  130. m_AllowLandJoinDivide =
  131. (flags & RegionFlags.AllowParcelChanges) != 0;
  132. m_BlockShowInSearch =
  133. ((uint)flags & (1 << 29)) != 0;
  134. m_DisableScripts =
  135. (flags & RegionFlags.SkipScripts) != 0;
  136. m_DisableCollisions =
  137. (flags & RegionFlags.SkipCollisions) != 0;
  138. m_DisablePhysics =
  139. (flags & RegionFlags.SkipPhysics) != 0;
  140. m_FixedSun =
  141. (flags & RegionFlags.SunFixed) != 0;
  142. m_Sandbox =
  143. (flags & RegionFlags.Sandbox) != 0;
  144. break;
  145. case "max_agents":
  146. m_AgentLimit = (int)value;
  147. break;
  148. case "object_bonus_factor":
  149. m_ObjectBonus = (double)value;
  150. break;
  151. case "sim_access":
  152. int access = (int)value;
  153. if (access <= 13)
  154. m_Maturity = 0;
  155. else
  156. m_Maturity = 1;
  157. break;
  158. case "terrain_base_0":
  159. m_TerrainTexture1 = (UUID)value;
  160. break;
  161. case "terrain_base_1":
  162. m_TerrainTexture2 = (UUID)value;
  163. break;
  164. case "terrain_base_2":
  165. m_TerrainTexture3 = (UUID)value;
  166. break;
  167. case "terrain_base_3":
  168. m_TerrainTexture4 = (UUID)value;
  169. break;
  170. case "terrain_start_height_0":
  171. m_Elevation1SW = (double)value;
  172. break;
  173. case "terrain_start_height_1":
  174. m_Elevation1NW = (double)value;
  175. break;
  176. case "terrain_start_height_2":
  177. m_Elevation1SE = (double)value;
  178. break;
  179. case "terrain_start_height_3":
  180. m_Elevation1NE = (double)value;
  181. break;
  182. case "terrain_height_range_0":
  183. m_Elevation2SW = (double)value;
  184. break;
  185. case "terrain_height_range_1":
  186. m_Elevation2NW = (double)value;
  187. break;
  188. case "terrain_height_range_2":
  189. m_Elevation2SE = (double)value;
  190. break;
  191. case "terrain_height_range_3":
  192. m_Elevation2NE = (double)value;
  193. break;
  194. case "region_water_height":
  195. m_WaterHeight = (double)value;
  196. break;
  197. case "terrain_raise_limit":
  198. m_TerrainRaiseLimit = (double)value;
  199. break;
  200. case "terrain_lower_limit":
  201. m_TerrainLowerLimit = (double)value;
  202. break;
  203. case "sun_hour":
  204. m_SunPosition = (double)value;
  205. break;
  206. }
  207. return true;
  208. }
  209. public void Save()
  210. {
  211. if (OnSave != null)
  212. OnSave(this);
  213. }
  214. private UUID m_RegionUUID = UUID.Zero;
  215. public UUID RegionUUID
  216. {
  217. get { return m_RegionUUID; }
  218. set { m_RegionUUID = value; }
  219. }
  220. private bool m_BlockTerraform = false;
  221. public bool BlockTerraform
  222. {
  223. get { return m_BlockTerraform; }
  224. set { m_BlockTerraform = value; }
  225. }
  226. private bool m_BlockFly = false;
  227. public bool BlockFly
  228. {
  229. get { return m_BlockFly; }
  230. set { m_BlockFly = value; }
  231. }
  232. private bool m_AllowDamage = false;
  233. public bool AllowDamage
  234. {
  235. get { return m_AllowDamage; }
  236. set { m_AllowDamage = value; }
  237. }
  238. private bool m_RestrictPushing = false;
  239. public bool RestrictPushing
  240. {
  241. get { return m_RestrictPushing; }
  242. set { m_RestrictPushing = value; }
  243. }
  244. private bool m_AllowLandResell = true;
  245. public bool AllowLandResell
  246. {
  247. get { return m_AllowLandResell; }
  248. set { m_AllowLandResell = value; }
  249. }
  250. private bool m_AllowLandJoinDivide = true;
  251. public bool AllowLandJoinDivide
  252. {
  253. get { return m_AllowLandJoinDivide; }
  254. set { m_AllowLandJoinDivide = value; }
  255. }
  256. private bool m_BlockShowInSearch = false;
  257. public bool BlockShowInSearch
  258. {
  259. get { return m_BlockShowInSearch; }
  260. set { m_BlockShowInSearch = value; }
  261. }
  262. private int m_AgentLimit = 40;
  263. public int AgentLimit
  264. {
  265. get { return m_AgentLimit; }
  266. set { m_AgentLimit = value; }
  267. }
  268. private double m_ObjectBonus = 1.0;
  269. public double ObjectBonus
  270. {
  271. get { return m_ObjectBonus; }
  272. set { m_ObjectBonus = value; }
  273. }
  274. private int m_Maturity = 1;
  275. public int Maturity
  276. {
  277. get { return m_Maturity; }
  278. set { m_Maturity = value; }
  279. }
  280. private bool m_DisableScripts = false;
  281. public bool DisableScripts
  282. {
  283. get { return m_DisableScripts; }
  284. set { m_DisableScripts = value; }
  285. }
  286. private bool m_DisableCollisions = false;
  287. public bool DisableCollisions
  288. {
  289. get { return m_DisableCollisions; }
  290. set { m_DisableCollisions = value; }
  291. }
  292. private bool m_DisablePhysics = false;
  293. public bool DisablePhysics
  294. {
  295. get { return m_DisablePhysics; }
  296. set { m_DisablePhysics = value; }
  297. }
  298. private UUID m_TerrainTexture1 = UUID.Zero;
  299. public UUID TerrainTexture1
  300. {
  301. get { return m_TerrainTexture1; }
  302. set
  303. {
  304. if (value == UUID.Zero)
  305. m_TerrainTexture1 = new UUID("b8d3965a-ad78-bf43-699b-bff8eca6c975");
  306. else
  307. m_TerrainTexture1 = value;
  308. }
  309. }
  310. private UUID m_TerrainTexture2 = UUID.Zero;
  311. public UUID TerrainTexture2
  312. {
  313. get { return m_TerrainTexture2; }
  314. set
  315. {
  316. if (value == UUID.Zero)
  317. m_TerrainTexture2 = new UUID("abb783e6-3e93-26c0-248a-247666855da3");
  318. else
  319. m_TerrainTexture2 = value;
  320. }
  321. }
  322. private UUID m_TerrainTexture3 = UUID.Zero;
  323. public UUID TerrainTexture3
  324. {
  325. get { return m_TerrainTexture3; }
  326. set
  327. {
  328. if (value == UUID.Zero)
  329. m_TerrainTexture3 = new UUID("179cdabd-398a-9b6b-1391-4dc333ba321f");
  330. else
  331. m_TerrainTexture3 = value;
  332. }
  333. }
  334. private UUID m_TerrainTexture4 = UUID.Zero;
  335. public UUID TerrainTexture4
  336. {
  337. get { return m_TerrainTexture4; }
  338. set
  339. {
  340. if (value == UUID.Zero)
  341. m_TerrainTexture4 = new UUID("beb169c7-11ea-fff2-efe5-0f24dc881df2");
  342. else
  343. m_TerrainTexture4 = value;
  344. }
  345. }
  346. private double m_Elevation1NW = 10;
  347. public double Elevation1NW
  348. {
  349. get { return m_Elevation1NW; }
  350. set { m_Elevation1NW = value; }
  351. }
  352. private double m_Elevation2NW = 60;
  353. public double Elevation2NW
  354. {
  355. get { return m_Elevation2NW; }
  356. set { m_Elevation2NW = value; }
  357. }
  358. private double m_Elevation1NE = 10;
  359. public double Elevation1NE
  360. {
  361. get { return m_Elevation1NE; }
  362. set { m_Elevation1NE = value; }
  363. }
  364. private double m_Elevation2NE = 60;
  365. public double Elevation2NE
  366. {
  367. get { return m_Elevation2NE; }
  368. set { m_Elevation2NE = value; }
  369. }
  370. private double m_Elevation1SE = 10;
  371. public double Elevation1SE
  372. {
  373. get { return m_Elevation1SE; }
  374. set { m_Elevation1SE = value; }
  375. }
  376. private double m_Elevation2SE = 60;
  377. public double Elevation2SE
  378. {
  379. get { return m_Elevation2SE; }
  380. set { m_Elevation2SE = value; }
  381. }
  382. private double m_Elevation1SW = 10;
  383. public double Elevation1SW
  384. {
  385. get { return m_Elevation1SW; }
  386. set { m_Elevation1SW = value; }
  387. }
  388. private double m_Elevation2SW = 60;
  389. public double Elevation2SW
  390. {
  391. get { return m_Elevation2SW; }
  392. set { m_Elevation2SW = value; }
  393. }
  394. private double m_WaterHeight = 20;
  395. public double WaterHeight
  396. {
  397. get { return m_WaterHeight; }
  398. set { m_WaterHeight = value; }
  399. }
  400. private double m_TerrainRaiseLimit = 100;
  401. public double TerrainRaiseLimit
  402. {
  403. get { return m_TerrainRaiseLimit; }
  404. set { m_TerrainRaiseLimit = value; }
  405. }
  406. private double m_TerrainLowerLimit = -100;
  407. public double TerrainLowerLimit
  408. {
  409. get { return m_TerrainLowerLimit; }
  410. set { m_TerrainLowerLimit = value; }
  411. }
  412. private bool m_UseEstateSun = true;
  413. public bool UseEstateSun
  414. {
  415. get { return m_UseEstateSun; }
  416. set { m_UseEstateSun = value; }
  417. }
  418. private bool m_Sandbox = false;
  419. public bool Sandbox
  420. {
  421. get { return m_Sandbox; }
  422. set { m_Sandbox = value; }
  423. }
  424. private Vector3 m_SunVector;
  425. public Vector3 SunVector
  426. {
  427. get { return m_SunVector; }
  428. set { m_SunVector = value; }
  429. }
  430. private UUID m_TerrainImageID;
  431. public UUID TerrainImageID
  432. {
  433. get { return m_TerrainImageID; }
  434. set { m_TerrainImageID = value; }
  435. }
  436. private bool m_FixedSun = false;
  437. public bool FixedSun
  438. {
  439. get { return m_FixedSun; }
  440. set { m_FixedSun = value; }
  441. }
  442. private double m_SunPosition = 0.0;
  443. public double SunPosition
  444. {
  445. get { return m_SunPosition; }
  446. set { m_SunPosition = value; }
  447. }
  448. private UUID m_Covenant = UUID.Zero;
  449. public UUID Covenant
  450. {
  451. get { return m_Covenant; }
  452. set { m_Covenant = value; }
  453. }
  454. }
  455. }