aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim.RegionServer/world/World.cs593
1 files changed, 369 insertions, 224 deletions
diff --git a/OpenSim.RegionServer/world/World.cs b/OpenSim.RegionServer/world/World.cs
index 4d57f14..721497a 100644
--- a/OpenSim.RegionServer/world/World.cs
+++ b/OpenSim.RegionServer/world/World.cs
@@ -45,75 +45,95 @@ namespace OpenSim.world
45 45
46 public World(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, string regionName) 46 public World(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, string regionName)
47 { 47 {
48 m_clientThreads = clientThreads; 48 try
49 m_regionHandle = regionHandle; 49 {
50 m_regionName = regionName; 50 m_clientThreads = clientThreads;
51 51 m_regionHandle = regionHandle;
52 m_scriptHandlers = new Dictionary<LLUUID, ScriptHandler>(); 52 m_regionName = regionName;
53 m_scripts = new Dictionary<string, ScriptFactory>(); 53
54 54 m_scriptHandlers = new Dictionary<LLUUID, ScriptHandler>();
55 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance"); 55 m_scripts = new Dictionary<string, ScriptFactory>();
56 Entities = new Dictionary<libsecondlife.LLUUID, Entity>(); 56
57 Avatars = new Dictionary<LLUUID, Avatar>(); 57 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance");
58 Prims = new Dictionary<LLUUID, Primitive>(); 58 Entities = new Dictionary<libsecondlife.LLUUID, Entity>();
59 59 Avatars = new Dictionary<LLUUID, Avatar>();
60 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating LandMap"); 60 Prims = new Dictionary<LLUUID, Primitive>();
61 TerrainManager = new TerrainManager(new SecondLife()); 61
62 Terrain = new TerrainEngine(); 62 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating LandMap");
63 Avatar.SetupTemplate("avatar-template.dat"); 63 TerrainManager = new TerrainManager(new SecondLife());
64 // MainConsole.Instance.WriteLine("World.cs - Creating script engine instance"); 64 Terrain = new TerrainEngine();
65 // Initialise this only after the world has loaded 65 Avatar.SetupTemplate("avatar-template.dat");
66 // Scripts = new ScriptEngine(this); 66 // MainConsole.Instance.WriteLine("World.cs - Creating script engine instance");
67 Avatar.LoadAnims(); 67 // Initialise this only after the world has loaded
68 this.SetDefaultScripts(); 68 // Scripts = new ScriptEngine(this);
69 this.LoadScriptEngines(); 69 Avatar.LoadAnims();
70 this.SetDefaultScripts();
71 this.LoadScriptEngines();
72 }
73 catch (Exception e)
74 {
75 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Constructor failed with exception " + e.ToString());
76 }
70 } 77 }
71 78
72 public void AddScript(Entity entity, Script script) 79 public void AddScript(Entity entity, Script script)
73 { 80 {
74 ScriptHandler scriptHandler = new ScriptHandler(script, entity, this); 81 try
75 m_scriptHandlers.Add(scriptHandler.ScriptId, scriptHandler); 82 {
83 ScriptHandler scriptHandler = new ScriptHandler(script, entity, this);
84 m_scriptHandlers.Add(scriptHandler.ScriptId, scriptHandler);
85 }
86 catch (Exception e)
87 {
88 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: AddScript() - Failed with exception " + e.ToString());
89 }
76 } 90 }
77 91
78 public void AddScript(Entity entity, string scriptData) 92 public void AddScript(Entity entity, string scriptData)
79 { 93 {
80 int scriptstart = 0; 94 try
81 int scriptend = 0; 95 {
82 string substring; 96 int scriptstart = 0;
83 scriptstart = scriptData.LastIndexOf("<Script>"); 97 int scriptend = 0;
84 scriptend = scriptData.LastIndexOf("</Script>"); 98 string substring;
85 substring = scriptData.Substring(scriptstart + 8, scriptend - scriptstart - 8); 99 scriptstart = scriptData.LastIndexOf("<Script>");
86 substring = substring.Trim(); 100 scriptend = scriptData.LastIndexOf("</Script>");
87 //Console.WriteLine("searching for script to add: " + substring); 101 substring = scriptData.Substring(scriptstart + 8, scriptend - scriptstart - 8);
88 102 substring = substring.Trim();
89 ScriptFactory scriptFactory; 103 //Console.WriteLine("searching for script to add: " + substring);
90 //Console.WriteLine("script string is " + substring); 104
91 if (substring.StartsWith("<ScriptEngine:")) 105 ScriptFactory scriptFactory;
92 { 106 //Console.WriteLine("script string is " + substring);
93 string substring1 = ""; 107 if (substring.StartsWith("<ScriptEngine:"))
94 string script = ""; 108 {
95 // Console.WriteLine("searching for script engine"); 109 string substring1 = "";
96 substring1 = substring.Remove(0, 14); 110 string script = "";
97 int dev = substring1.IndexOf(','); 111 // Console.WriteLine("searching for script engine");
98 string sEngine = substring1.Substring(0, dev); 112 substring1 = substring.Remove(0, 14);
99 substring1 = substring1.Remove(0, dev + 1); 113 int dev = substring1.IndexOf(',');
100 int end = substring1.IndexOf('>'); 114 string sEngine = substring1.Substring(0, dev);
101 string sName = substring1.Substring(0, end); 115 substring1 = substring1.Remove(0, dev + 1);
102 //Console.WriteLine(" script info : " + sEngine + " , " + sName); 116 int end = substring1.IndexOf('>');
103 int startscript = substring.IndexOf('>'); 117 string sName = substring1.Substring(0, end);
104 script = substring.Remove(0, startscript + 1); 118 //Console.WriteLine(" script info : " + sEngine + " , " + sName);
105 // Console.WriteLine("script data is " + script); 119 int startscript = substring.IndexOf('>');
106 if (this.scriptEngines.ContainsKey(sEngine)) 120 script = substring.Remove(0, startscript + 1);
121 // Console.WriteLine("script data is " + script);
122 if (this.scriptEngines.ContainsKey(sEngine))
123 {
124 this.scriptEngines[sEngine].LoadScript(script, sName, entity.localid);
125 }
126 }
127 else if (this.m_scripts.TryGetValue(substring, out scriptFactory))
107 { 128 {
108 this.scriptEngines[sEngine].LoadScript(script, sName, entity.localid); 129 //Console.WriteLine("added script");
130 this.AddScript(entity, scriptFactory());
109 } 131 }
110 } 132 }
111 else if (this.m_scripts.TryGetValue(substring, out scriptFactory)) 133 catch (Exception e)
112 { 134 {
113 //Console.WriteLine("added script"); 135 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: AddScript() - Failed with exception " + e.ToString());
114 this.AddScript(entity, scriptFactory());
115 } 136 }
116
117 } 137 }
118 138
119 public InventoryCache InventoryCache 139 public InventoryCache InventoryCache
@@ -145,306 +165,431 @@ namespace OpenSim.world
145 165
146 public void Update() 166 public void Update()
147 { 167 {
148 if (this.phyScene.IsThreaded) 168 try
149 { 169 {
150 this.phyScene.GetResults(); 170 if (this.phyScene.IsThreaded)
171 {
172 this.phyScene.GetResults();
151 173
152 } 174 }
153 175
154 foreach (libsecondlife.LLUUID UUID in Entities.Keys) 176 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
155 { 177 {
156 Entities[UUID].addForces(); 178 Entities[UUID].addForces();
157 } 179 }
158 180
159 lock (this.LockPhysicsEngine) 181 lock (this.LockPhysicsEngine)
160 { 182 {
161 this.phyScene.Simulate(timeStep); 183 this.phyScene.Simulate(timeStep);
162 } 184 }
163 185
164 foreach (libsecondlife.LLUUID UUID in Entities.Keys) 186 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
165 { 187 {
166 Entities[UUID].update(); 188 Entities[UUID].update();
167 } 189 }
168 190
169 foreach (ScriptHandler scriptHandler in m_scriptHandlers.Values) 191 foreach (ScriptHandler scriptHandler in m_scriptHandlers.Values)
170 { 192 {
171 scriptHandler.OnFrame(); 193 scriptHandler.OnFrame();
172 } 194 }
173 foreach (IScriptEngine scripteng in this.scriptEngines.Values) 195 foreach (IScriptEngine scripteng in this.scriptEngines.Values)
174 { 196 {
175 scripteng.OnFrame(); 197 scripteng.OnFrame();
198 }
199 //backup world data
200 this.storageCount++;
201 if (storageCount > 1200) //set to how often you want to backup
202 {
203 this.Backup();
204 storageCount = 0;
205 }
176 } 206 }
177 //backup world data 207 catch (Exception e)
178 this.storageCount++;
179 if (storageCount > 1200) //set to how often you want to backup
180 { 208 {
181 this.Backup(); 209 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Update() - Failed with exception " + e.ToString());
182 storageCount = 0;
183 } 210 }
184 } 211 }
185 212
186 public bool LoadStorageDLL(string dllName) 213 public bool LoadStorageDLL(string dllName)
187 { 214 {
188 Assembly pluginAssembly = Assembly.LoadFrom(dllName); 215 try
189 ILocalStorage store = null;
190
191 foreach (Type pluginType in pluginAssembly.GetTypes())
192 { 216 {
193 if (pluginType.IsPublic) 217 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
218 ILocalStorage store = null;
219
220 foreach (Type pluginType in pluginAssembly.GetTypes())
194 { 221 {
195 if (!pluginType.IsAbstract) 222 if (pluginType.IsPublic)
196 { 223 {
197 Type typeInterface = pluginType.GetInterface("ILocalStorage", true); 224 if (!pluginType.IsAbstract)
198
199 if (typeInterface != null)
200 { 225 {
201 ILocalStorage plug = (ILocalStorage)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); 226 Type typeInterface = pluginType.GetInterface("ILocalStorage", true);
202 store = plug; 227
203 break; 228 if (typeInterface != null)
204 } 229 {
230 ILocalStorage plug = (ILocalStorage)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
231 store = plug;
232 break;
233 }
205 234
206 typeInterface = null; 235 typeInterface = null;
236 }
207 } 237 }
208 } 238 }
239 pluginAssembly = null;
240 this.localStorage = store;
241 return (store == null);
242 }
243 catch (Exception e)
244 {
245 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: LoadStorageDLL() - Failed with exception " + e.ToString());
209 } 246 }
210 pluginAssembly = null;
211 this.localStorage = store;
212 return (store == null);
213 } 247 }
214 248
215 #region Regenerate Terrain 249 #region Regenerate Terrain
216 250
217 public void RegenerateTerrain() 251 public void RegenerateTerrain()
218 { 252 {
219 Terrain.hills(); 253 try
220
221 lock (this.LockPhysicsEngine)
222 { 254 {
223 this.phyScene.SetTerrain(Terrain.getHeights1D()); 255 Terrain.hills();
224 }
225 this.localStorage.SaveMap(this.Terrain.getHeights1D());
226 256
227 foreach (SimClient client in m_clientThreads.Values) 257 lock (this.LockPhysicsEngine)
228 { 258 {
229 this.SendLayerData(client); 259 this.phyScene.SetTerrain(Terrain.getHeights1D());
230 } 260 }
261 this.localStorage.SaveMap(this.Terrain.getHeights1D());
231 262
232 foreach (libsecondlife.LLUUID UUID in Entities.Keys) 263 foreach (SimClient client in m_clientThreads.Values)
264 {
265 this.SendLayerData(client);
266 }
267
268 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
269 {
270 Entities[UUID].LandRenegerated();
271 }
272 }
273 catch (Exception e)
233 { 274 {
234 Entities[UUID].LandRenegerated(); 275 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString());
235 } 276 }
236 } 277 }
237 278
238 public void RegenerateTerrain(float[,] newMap) 279 public void RegenerateTerrain(float[,] newMap)
239 { 280 {
240 this.Terrain.setHeights2D(newMap); 281 try
241 lock (this.LockPhysicsEngine)
242 { 282 {
243 this.phyScene.SetTerrain(this.Terrain.getHeights1D()); 283 this.Terrain.setHeights2D(newMap);
244 } 284 lock (this.LockPhysicsEngine)
245 this.localStorage.SaveMap(this.Terrain.getHeights1D()); 285 {
286 this.phyScene.SetTerrain(this.Terrain.getHeights1D());
287 }
288 this.localStorage.SaveMap(this.Terrain.getHeights1D());
246 289
247 foreach (SimClient client in m_clientThreads.Values) 290 foreach (SimClient client in m_clientThreads.Values)
248 { 291 {
249 this.SendLayerData(client); 292 this.SendLayerData(client);
250 } 293 }
251 294
252 foreach (libsecondlife.LLUUID UUID in Entities.Keys) 295 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
296 {
297 Entities[UUID].LandRenegerated();
298 }
299 }
300 catch (Exception e)
253 { 301 {
254 Entities[UUID].LandRenegerated(); 302 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString());
255 } 303 }
256 } 304 }
257 305
258 public void RegenerateTerrain(bool changes, int pointx, int pointy) 306 public void RegenerateTerrain(bool changes, int pointx, int pointy)
259 { 307 {
260 if (changes) 308 try
261 { 309 {
262 lock (this.LockPhysicsEngine) 310 if (changes)
263 { 311 {
264 this.phyScene.SetTerrain(this.Terrain.getHeights1D()); 312 lock (this.LockPhysicsEngine)
265 } 313 {
266 this.localStorage.SaveMap(this.Terrain.getHeights1D()); 314 this.phyScene.SetTerrain(this.Terrain.getHeights1D());
315 }
316 this.localStorage.SaveMap(this.Terrain.getHeights1D());
267 317
268 foreach (SimClient client in m_clientThreads.Values) 318 foreach (SimClient client in m_clientThreads.Values)
269 { 319 {
270 this.SendLayerData(pointx, pointy, client); 320 this.SendLayerData(pointx, pointy, client);
321 }
271 } 322 }
272 } 323 }
324 catch (Exception e)
325 {
326 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString());
327 }
273 } 328 }
274 329
275 #endregion 330 #endregion
276 331
277 public void LoadWorldMap() 332 public void LoadWorldMap()
278 { 333 {
279 float[] map = this.localStorage.LoadWorld(); 334 try
280 if (map == null)
281 { 335 {
282 Console.WriteLine("creating new terrain"); 336 float[] map = this.localStorage.LoadWorld();
283 this.Terrain.hills(); 337 if (map == null)
338 {
339 Console.WriteLine("creating new terrain");
340 this.Terrain.hills();
284 341
285 this.localStorage.SaveMap(this.Terrain.getHeights1D()); 342 this.localStorage.SaveMap(this.Terrain.getHeights1D());
343 }
344 else
345 {
346 this.Terrain.setHeights1D(map);
347 }
286 } 348 }
287 else 349 catch (Exception e)
288 { 350 {
289 this.Terrain.setHeights1D(map); 351 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: LoadWorldMap() - Failed with exception " + e.ToString());
290 } 352 }
291 } 353 }
292 354
293 public void LoadPrimsFromStorage() 355 public void LoadPrimsFromStorage()
294 { 356 {
295 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: LoadPrimsFromStorage() - Loading primitives"); 357 try
296 this.localStorage.LoadPrimitives(this); 358 {
359 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: LoadPrimsFromStorage() - Loading primitives");
360 this.localStorage.LoadPrimitives(this);
361 }
362 catch (Exception e)
363 {
364 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: LoadPrimsFromStorage() - Failed with exception " + e.ToString());
365 }
297 } 366 }
298 367
299 public void PrimFromStorage(PrimData prim) 368 public void PrimFromStorage(PrimData prim)
300 { 369 {
301 if (prim.LocalID >= this._primCount) 370 try
371 {
372 if (prim.LocalID >= this._primCount)
373 {
374 _primCount = prim.LocalID + 1;
375 }
376 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: PrimFromStorage() - Reloading prim (localId " + prim.LocalID + " ) from storage");
377 Primitive nPrim = new Primitive(m_clientThreads, m_regionHandle, this);
378 nPrim.CreateFromStorage(prim);
379 this.Entities.Add(nPrim.uuid, nPrim);
380 }
381 catch (Exception e)
302 { 382 {
303 _primCount = prim.LocalID + 1; 383 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: PrimFromStorage() - Failed with exception " + e.ToString());
304 } 384 }
305 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: PrimFromStorage() - Reloading prim (localId " + prim.LocalID + " ) from storage");
306 Primitive nPrim = new Primitive(m_clientThreads, m_regionHandle, this);
307 nPrim.CreateFromStorage(prim);
308 this.Entities.Add(nPrim.uuid, nPrim);
309 } 385 }
310 386
311 public void Close() 387 public void Close()
312 { 388 {
313 this.localStorage.ShutDown(); 389 try
390 {
391 this.localStorage.ShutDown();
392 }
393 catch (Exception e)
394 {
395 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Close() - Failed with exception " + e.ToString());
396 }
314 } 397 }
315 398
316 public void SendLayerData(SimClient RemoteClient) 399 public void SendLayerData(SimClient RemoteClient)
317 { 400 {
318 int[] patches = new int[4]; 401 try
319
320 for (int y = 0; y < 16; y++)
321 { 402 {
322 for (int x = 0; x < 16; x = x + 4) 403 int[] patches = new int[4];
404
405 for (int y = 0; y < 16; y++)
323 { 406 {
324 patches[0] = x + 0 + y * 16; 407 for (int x = 0; x < 16; x = x + 4)
325 patches[1] = x + 1 + y * 16; 408 {
326 patches[2] = x + 2 + y * 16; 409 patches[0] = x + 0 + y * 16;
327 patches[3] = x + 3 + y * 16; 410 patches[1] = x + 1 + y * 16;
411 patches[2] = x + 2 + y * 16;
412 patches[3] = x + 3 + y * 16;
328 413
329 Packet layerpack = TerrainManager.CreateLandPacket(Terrain.getHeights1D(), patches); 414 Packet layerpack = TerrainManager.CreateLandPacket(Terrain.getHeights1D(), patches);
330 RemoteClient.OutPacket(layerpack); 415 RemoteClient.OutPacket(layerpack);
416 }
331 } 417 }
332 } 418 }
419 catch (Exception e)
420 {
421 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: SendLayerData() - Failed with exception " + e.ToString());
422 }
333 } 423 }
334 424
335 public void SendLayerData(int px, int py, SimClient RemoteClient) 425 public void SendLayerData(int px, int py, SimClient RemoteClient)
336 { 426 {
337 int[] patches = new int[1]; 427 try
338 int patchx, patchy; 428 {
339 patchx = px / 16; 429 int[] patches = new int[1];
340 /* if (patchx > 12) 430 int patchx, patchy;
341 { 431 patchx = px / 16;
342 patchx = 12; 432 /* if (patchx > 12)
343 }*/ 433 {
344 patchy = py / 16; 434 patchx = 12;
345 435 }*/
346 patches[0] = patchx + 0 + patchy * 16; 436 patchy = py / 16;
347 //patches[1] = patchx + 1 + patchy * 16; 437
348 //patches[2] = patchx + 2 + patchy * 16; 438 patches[0] = patchx + 0 + patchy * 16;
349 //patches[3] = patchx + 3 + patchy * 16; 439 //patches[1] = patchx + 1 + patchy * 16;
350 440 //patches[2] = patchx + 2 + patchy * 16;
351 Packet layerpack = TerrainManager.CreateLandPacket(Terrain.getHeights1D(), patches); 441 //patches[3] = patchx + 3 + patchy * 16;
352 RemoteClient.OutPacket(layerpack); 442
443 Packet layerpack = TerrainManager.CreateLandPacket(Terrain.getHeights1D(), patches);
444 RemoteClient.OutPacket(layerpack);
445 }
446 catch (Exception e)
447 {
448 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: SendLayerData() - Failed with exception " + e.ToString());
449 }
353 } 450 }
354 451
355 public void GetInitialPrims(SimClient RemoteClient) 452 public void GetInitialPrims(SimClient RemoteClient)
356 { 453 {
357 foreach (libsecondlife.LLUUID UUID in Entities.Keys) 454 try
358 { 455 {
359 if (Entities[UUID] is Primitive) 456 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
360 { 457 {
361 Primitive primitive = Entities[UUID] as Primitive; 458 if (Entities[UUID] is Primitive)
362 primitive.UpdateClient(RemoteClient); 459 {
460 Primitive primitive = Entities[UUID] as Primitive;
461 primitive.UpdateClient(RemoteClient);
462 }
363 } 463 }
364 } 464 }
465 catch (Exception e)
466 {
467 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: GetInitialPrims() - Failed with exception " + e.ToString());
468 }
365 } 469 }
366 470
367 public void AddViewerAgent(SimClient agentClient) 471 public void AddViewerAgent(SimClient agentClient)
368 { 472 {
369 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent"); 473 try
370 Avatar newAvatar = new Avatar(agentClient, this, m_regionName, m_clientThreads, m_regionHandle); 474 {
371 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world"); 475 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent");
372 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake "); 476 Avatar newAvatar = new Avatar(agentClient, this, m_regionName, m_clientThreads, m_regionHandle);
373 newAvatar.SendRegionHandshake(this); 477 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world");
374 if (!agentClient.m_child) 478 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake ");
375 { 479 newAvatar.SendRegionHandshake(this);
376 PhysicsVector pVec = new PhysicsVector(newAvatar.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z); 480 if (!agentClient.m_child)
377 lock (this.LockPhysicsEngine)
378 { 481 {
379 newAvatar.PhysActor = this.phyScene.AddAvatar(pVec); 482 PhysicsVector pVec = new PhysicsVector(newAvatar.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z);
483 lock (this.LockPhysicsEngine)
484 {
485 newAvatar.PhysActor = this.phyScene.AddAvatar(pVec);
486 }
487 }
488 lock (Entities)
489 {
490 this.Entities.Add(agentClient.AgentID, newAvatar);
491 }
492 lock (Avatars)
493 {
494 this.Avatars.Add(agentClient.AgentID, newAvatar);
380 } 495 }
381 } 496 }
382 lock (Entities) 497 catch (Exception e)
383 {
384 this.Entities.Add(agentClient.AgentID, newAvatar);
385 }
386 lock (Avatars)
387 { 498 {
388 this.Avatars.Add(agentClient.AgentID, newAvatar); 499 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: AddViewerAgent() - Failed with exception " + e.ToString());
389 } 500 }
390
391 } 501 }
392 502
393 public void RemoveViewerAgent(SimClient agentClient) 503 public void RemoveViewerAgent(SimClient agentClient)
394 { 504 {
395 lock (Entities) 505 try
396 { 506 {
397 Entities.Remove(agentClient.AgentID); 507 lock (Entities)
508 {
509 Entities.Remove(agentClient.AgentID);
510 }
511 lock (Avatars)
512 {
513 Avatars.Remove(agentClient.AgentID);
514 }
398 } 515 }
399 lock (Avatars) 516 catch (Exception e)
400 { 517 {
401 Avatars.Remove(agentClient.AgentID); 518 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: RemoveViewerAgent() - Failed with exception " + e.ToString());
402 } 519 }
403 } 520 }
404 521
405 public void AddNewPrim(ObjectAddPacket addPacket, SimClient AgentClient) 522 public void AddNewPrim(ObjectAddPacket addPacket, SimClient AgentClient)
406 { 523 {
407 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: AddNewPrim() - Creating new prim"); 524 try
408 Primitive prim = new Primitive(m_clientThreads, m_regionHandle, this); 525 {
409 prim.CreateFromPacket(addPacket, AgentClient.AgentID, this._primCount); 526 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: AddNewPrim() - Creating new prim");
410 PhysicsVector pVec = new PhysicsVector(prim.Pos.X, prim.Pos.Y, prim.Pos.Z); 527 Primitive prim = new Primitive(m_clientThreads, m_regionHandle, this);
411 PhysicsVector pSize = new PhysicsVector(0.255f, 0.255f, 0.255f); 528 prim.CreateFromPacket(addPacket, AgentClient.AgentID, this._primCount);
412 if (OpenSim.world.Avatar.PhysicsEngineFlying) 529 PhysicsVector pVec = new PhysicsVector(prim.Pos.X, prim.Pos.Y, prim.Pos.Z);
413 { 530 PhysicsVector pSize = new PhysicsVector(0.255f, 0.255f, 0.255f);
414 lock (this.LockPhysicsEngine) 531 if (OpenSim.world.Avatar.PhysicsEngineFlying)
415 { 532 {
416 prim.PhysActor = this.phyScene.AddPrim(pVec, pSize); 533 lock (this.LockPhysicsEngine)
534 {
535 prim.PhysActor = this.phyScene.AddPrim(pVec, pSize);
536 }
417 } 537 }
418 }
419 538
420 this.Entities.Add(prim.uuid, prim); 539 this.Entities.Add(prim.uuid, prim);
421 this._primCount++; 540 this._primCount++;
541 }
542 catch (Exception e)
543 {
544 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: AddNewPrim() - Failed with exception " + e.ToString());
545 }
422 } 546 }
423 547
424 public bool Backup() 548 public bool Backup()
425 { 549 {
426 if (Terrain.tainted > 0) 550 try
427 { 551 {
428 Terrain.tainted = 0; 552 // Terrain backup routines
429 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Backup() - Terrain tainted, saving."); 553 if (Terrain.tainted > 0)
430 localStorage.SaveMap(Terrain.getHeights1D()); 554 {
431 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Backup() - Terrain saved, informing Physics."); 555 Terrain.tainted = 0;
432 phyScene.SetTerrain(Terrain.getHeights1D()); 556 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Backup() - Terrain tainted, saving.");
557 localStorage.SaveMap(Terrain.getHeights1D());
558 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Backup() - Terrain saved, informing Physics.");
559 phyScene.SetTerrain(Terrain.getHeights1D());
560 }
561
562 // Primitive backup routines
563 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Backup() - Backing up Primitives");
564 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
565 {
566 Entities[UUID].BackUp();
567 }
568
569 // Backup successful
570 return true;
433 } 571 }
434 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Backup() - Backing up Primitives"); 572 catch (Exception e)
435 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
436 { 573 {
437 Entities[UUID].BackUp(); 574 // Backup failed
575 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Backup() - Backup Failed with exception " + e.ToString());
576 return false;
438 } 577 }
439 return true;
440 } 578 }
441 579
442 public void SetDefaultScripts() 580 public void SetDefaultScripts()
443 { 581 {
444 this.m_scripts.Add("FollowRandomAvatar", delegate() 582 try
445 { 583 {
446 return new FollowRandomAvatar(); 584 this.m_scripts.Add("FollowRandomAvatar", delegate()
447 }); 585 {
586 return new FollowRandomAvatar();
587 });
588 }
589 catch (Exception e)
590 {
591 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: SetDefaultScripts() - Failed with exception " + e.ToString());
592 }
448 } 593 }
449 594
450 } 595 }