aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs271
1 files changed, 203 insertions, 68 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 7a6739b..3f9c026 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -39,7 +39,7 @@ using OpenMetaverse;
39using OpenMetaverse.Packets; 39using OpenMetaverse.Packets;
40using OpenSim; 40using OpenSim;
41using OpenSim.Framework; 41using OpenSim.Framework;
42using OpenSim.Framework.Communications.Cache; 42
43using OpenSim.Region.CoreModules; 43using OpenSim.Region.CoreModules;
44using OpenSim.Region.CoreModules.World.Land; 44using OpenSim.Region.CoreModules.World.Land;
45using OpenSim.Region.CoreModules.World.Terrain; 45using OpenSim.Region.CoreModules.World.Terrain;
@@ -53,9 +53,10 @@ using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
53using OpenSim.Region.ScriptEngine.Interfaces; 53using OpenSim.Region.ScriptEngine.Interfaces;
54using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces; 54using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces;
55using OpenSim.Services.Interfaces; 55using OpenSim.Services.Interfaces;
56 56using OpenSim.Services.Interfaces;
57using PrimType = OpenSim.Region.Framework.Scenes.PrimType;
58using GridRegion = OpenSim.Services.Interfaces.GridRegion; 57using GridRegion = OpenSim.Services.Interfaces.GridRegion;
58using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo;
59using PrimType = OpenSim.Region.Framework.Scenes.PrimType;
59using AssetLandmark = OpenSim.Framework.AssetLandmark; 60using AssetLandmark = OpenSim.Framework.AssetLandmark;
60 61
61using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat; 62using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
@@ -917,10 +918,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
917 public string resolveName(UUID objecUUID) 918 public string resolveName(UUID objecUUID)
918 { 919 {
919 // try avatar username surname 920 // try avatar username surname
920 CachedUserInfo profile = World.CommsManager.UserProfileCacheService.GetUserDetails(objecUUID); 921 UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, objecUUID);
921 if (profile != null && profile.UserProfile != null) 922 if (account != null)
922 { 923 {
923 string avatarname = profile.UserProfile.FirstName + " " + profile.UserProfile.SurName; 924 string avatarname = account.Name;
924 return avatarname; 925 return avatarname;
925 } 926 }
926 // try an scene object 927 // try an scene object
@@ -1252,7 +1253,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1252 1253
1253 if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB) 1254 if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB)
1254 { 1255 {
1255 NotImplemented("llSetStatus - STATUS_BLOCK_GRAB"); 1256 if (value != 0)
1257 m_host.SetBlockGrab(true);
1258 else
1259 m_host.SetBlockGrab(false);
1256 } 1260 }
1257 1261
1258 if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE) 1262 if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE)
@@ -1265,12 +1269,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1265 1269
1266 if ((status & ScriptBaseClass.STATUS_RETURN_AT_EDGE) == ScriptBaseClass.STATUS_RETURN_AT_EDGE) 1270 if ((status & ScriptBaseClass.STATUS_RETURN_AT_EDGE) == ScriptBaseClass.STATUS_RETURN_AT_EDGE)
1267 { 1271 {
1268 NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE"); 1272 if (value != 0)
1273 m_host.SetReturnAtEdge(true);
1274 else
1275 m_host.SetReturnAtEdge(false);
1269 } 1276 }
1270 1277
1271 if ((status & ScriptBaseClass.STATUS_SANDBOX) == ScriptBaseClass.STATUS_SANDBOX) 1278 if ((status & ScriptBaseClass.STATUS_SANDBOX) == ScriptBaseClass.STATUS_SANDBOX)
1272 { 1279 {
1273 NotImplemented("llSetStatus - STATUS_SANDBOX"); 1280 if (value != 0)
1281 m_host.SetStatusSandbox(true);
1282 else
1283 m_host.SetStatusSandbox(false);
1274 } 1284 }
1275 1285
1276 if (statusrotationaxis != 0) 1286 if (statusrotationaxis != 0)
@@ -1307,8 +1317,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1307 return 0; 1317 return 0;
1308 1318
1309 case ScriptBaseClass.STATUS_BLOCK_GRAB: 1319 case ScriptBaseClass.STATUS_BLOCK_GRAB:
1310 NotImplemented("llGetStatus - STATUS_BLOCK_GRAB"); 1320 if (m_host.GetBlockGrab())
1311 return 0; 1321 return 1;
1322 else
1323 return 0;
1312 1324
1313 case ScriptBaseClass.STATUS_DIE_AT_EDGE: 1325 case ScriptBaseClass.STATUS_DIE_AT_EDGE:
1314 if (m_host.GetDieAtEdge()) 1326 if (m_host.GetDieAtEdge())
@@ -1317,24 +1329,34 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1317 return 0; 1329 return 0;
1318 1330
1319 case ScriptBaseClass.STATUS_RETURN_AT_EDGE: 1331 case ScriptBaseClass.STATUS_RETURN_AT_EDGE:
1320 NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE"); 1332 if (m_host.GetReturnAtEdge())
1321 return 0; 1333 return 1;
1334 else
1335 return 0;
1322 1336
1323 case ScriptBaseClass.STATUS_ROTATE_X: 1337 case ScriptBaseClass.STATUS_ROTATE_X:
1324 NotImplemented("llGetStatus - STATUS_ROTATE_X"); 1338 if (m_host.GetAxisRotation(2) == 2)
1325 return 0; 1339 return 1;
1340 else
1341 return 0;
1326 1342
1327 case ScriptBaseClass.STATUS_ROTATE_Y: 1343 case ScriptBaseClass.STATUS_ROTATE_Y:
1328 NotImplemented("llGetStatus - STATUS_ROTATE_Y"); 1344 if (m_host.GetAxisRotation(4) == 4)
1329 return 0; 1345 return 1;
1346 else
1347 return 0;
1330 1348
1331 case ScriptBaseClass.STATUS_ROTATE_Z: 1349 case ScriptBaseClass.STATUS_ROTATE_Z:
1332 NotImplemented("llGetStatus - STATUS_ROTATE_Z"); 1350 if (m_host.GetAxisRotation(8) == 8)
1333 return 0; 1351 return 1;
1352 else
1353 return 0;
1334 1354
1335 case ScriptBaseClass.STATUS_SANDBOX: 1355 case ScriptBaseClass.STATUS_SANDBOX:
1336 NotImplemented("llGetStatus - STATUS_SANDBOX"); 1356 if (m_host.GetStatusSandbox())
1337 return 0; 1357 return 1;
1358 else
1359 return 0;
1338 } 1360 }
1339 return 0; 1361 return 0;
1340 } 1362 }
@@ -2346,7 +2368,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2346 m_host.AddScriptLPS(1); 2368 m_host.AddScriptLPS(1);
2347 2369
2348 // send the sound, once, to all clients in range 2370 // send the sound, once, to all clients in range
2349 m_host.SendSound(KeyOrName(sound).ToString(), volume, false, 0); 2371 m_host.SendSound(KeyOrName(sound).ToString(), volume, false, 0, 0, false, false);
2350 } 2372 }
2351 2373
2352 // Xantor 20080528 we should do this differently. 2374 // Xantor 20080528 we should do this differently.
@@ -2376,42 +2398,98 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2376 public void llLoopSoundMaster(string sound, double volume) 2398 public void llLoopSoundMaster(string sound, double volume)
2377 { 2399 {
2378 m_host.AddScriptLPS(1); 2400 m_host.AddScriptLPS(1);
2379 NotImplemented("llLoopSoundMaster"); 2401 m_host.ParentGroup.LoopSoundMasterPrim = m_host;
2402 lock (m_host.ParentGroup.LoopSoundSlavePrims)
2403 {
2404 foreach (SceneObjectPart prim in m_host.ParentGroup.LoopSoundSlavePrims)
2405 {
2406 if (prim.Sound != UUID.Zero)
2407 llStopSound();
2408
2409 prim.Sound = KeyOrName(sound);
2410 prim.SoundGain = volume;
2411 prim.SoundFlags = 1; // looping
2412 prim.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
2413
2414 prim.ScheduleFullUpdate();
2415 prim.SendFullUpdateToAllClients();
2416 }
2417 }
2418 if (m_host.Sound != UUID.Zero)
2419 llStopSound();
2420
2421 m_host.Sound = KeyOrName(sound);
2422 m_host.SoundGain = volume;
2423 m_host.SoundFlags = 1; // looping
2424 m_host.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
2425
2426 m_host.ScheduleFullUpdate();
2427 m_host.SendFullUpdateToAllClients();
2380 } 2428 }
2381 2429
2382 public void llLoopSoundSlave(string sound, double volume) 2430 public void llLoopSoundSlave(string sound, double volume)
2383 { 2431 {
2384 m_host.AddScriptLPS(1); 2432 m_host.AddScriptLPS(1);
2385 NotImplemented("llLoopSoundSlave"); 2433 lock (m_host.ParentGroup.LoopSoundSlavePrims)
2434 {
2435 m_host.ParentGroup.LoopSoundSlavePrims.Add(m_host);
2436 }
2386 } 2437 }
2387 2438
2388 public void llPlaySoundSlave(string sound, double volume) 2439 public void llPlaySoundSlave(string sound, double volume)
2389 { 2440 {
2390 m_host.AddScriptLPS(1); 2441 m_host.AddScriptLPS(1);
2391 NotImplemented("llPlaySoundSlave"); 2442
2443 // send the sound, once, to all clients in range
2444 m_host.SendSound(KeyOrName(sound).ToString(), volume, false, 0, 0, true, false);
2392 } 2445 }
2393 2446
2394 public void llTriggerSound(string sound, double volume) 2447 public void llTriggerSound(string sound, double volume)
2395 { 2448 {
2396 m_host.AddScriptLPS(1); 2449 m_host.AddScriptLPS(1);
2397 // send the sound, once, to all clients in range 2450 // send the sound, once, to all clients in range
2398 m_host.SendSound(KeyOrName(sound).ToString(), volume, true, 0); 2451 m_host.SendSound(KeyOrName(sound).ToString(), volume, true, 0, 0, false, false);
2399 } 2452 }
2400 2453
2401 // Xantor 20080528: Clear prim data of sound instead 2454 // Xantor 20080528: Clear prim data of sound instead
2402 public void llStopSound() 2455 public void llStopSound()
2403 { 2456 {
2404 m_host.AddScriptLPS(1); 2457 m_host.AddScriptLPS(1);
2405 2458 if (m_host.ParentGroup.LoopSoundSlavePrims.Contains(m_host))
2406 m_host.Sound = UUID.Zero; 2459 {
2407 m_host.SoundGain = 0; 2460 if (m_host.ParentGroup.LoopSoundMasterPrim == m_host)
2408 m_host.SoundFlags = 0; 2461 {
2409 m_host.SoundRadius = 0; 2462 foreach (SceneObjectPart part in m_host.ParentGroup.LoopSoundSlavePrims)
2410 2463 {
2411 m_host.ScheduleFullUpdate(); 2464 part.Sound = UUID.Zero;
2412 m_host.SendFullUpdateToAllClients(); 2465 part.SoundGain = 0;
2413 2466 part.SoundFlags = 0;
2414 // m_host.SendSound(UUID.Zero.ToString(), 1.0, false, 2); 2467 part.SoundRadius = 0;
2468 part.ScheduleFullUpdate();
2469 part.SendFullUpdateToAllClients();
2470 }
2471 m_host.ParentGroup.LoopSoundMasterPrim = null;
2472 m_host.ParentGroup.LoopSoundSlavePrims.Clear();
2473 }
2474 else
2475 {
2476 m_host.Sound = UUID.Zero;
2477 m_host.SoundGain = 0;
2478 m_host.SoundFlags = 0;
2479 m_host.SoundRadius = 0;
2480 m_host.ScheduleFullUpdate();
2481 m_host.SendFullUpdateToAllClients();
2482 }
2483 }
2484 else
2485 {
2486 m_host.Sound = UUID.Zero;
2487 m_host.SoundGain = 0;
2488 m_host.SoundFlags = 0;
2489 m_host.SoundRadius = 0;
2490 m_host.ScheduleFullUpdate();
2491 m_host.SendFullUpdateToAllClients();
2492 }
2415 } 2493 }
2416 2494
2417 public void llPreloadSound(string sound) 2495 public void llPreloadSound(string sound)
@@ -2803,8 +2881,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2803 2881
2804 public void llLookAt(LSL_Vector target, double strength, double damping) 2882 public void llLookAt(LSL_Vector target, double strength, double damping)
2805 { 2883 {
2806 // partial implementation, rotates objects correctly but does not apply strength or damping attributes
2807
2808 m_host.AddScriptLPS(1); 2884 m_host.AddScriptLPS(1);
2809 // Determine where we are looking from 2885 // Determine where we are looking from
2810 LSL_Vector from = llGetPos(); 2886 LSL_Vector from = llGetPos();
@@ -2824,9 +2900,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2824 // the angles of rotation in radians into rotation value 2900 // the angles of rotation in radians into rotation value
2825 2901
2826 LSL_Types.Quaternion rot = llEuler2Rot(angle); 2902 LSL_Types.Quaternion rot = llEuler2Rot(angle);
2827 2903 Quaternion rotation = new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s);
2904 m_host.startLookAt(rotation, (float)damping, (float)strength);
2828 // Orient the object to the angle calculated 2905 // Orient the object to the angle calculated
2829 llSetRot(rot); 2906 //llSetRot(rot);
2830 } 2907 }
2831 2908
2832 public void llRotLookAt(LSL_Rotation target, double strength, double damping) 2909 public void llRotLookAt(LSL_Rotation target, double strength, double damping)
@@ -3329,13 +3406,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3329 public void llPointAt(LSL_Vector pos) 3406 public void llPointAt(LSL_Vector pos)
3330 { 3407 {
3331 m_host.AddScriptLPS(1); 3408 m_host.AddScriptLPS(1);
3332 NotImplemented("llPointAt"); 3409 ScenePresence Owner = World.GetScenePresence(m_host.UUID);
3410 LSL_Rotation rot = llEuler2Rot(pos);
3411 Owner.PreviousRotation = Owner.Rotation;
3412 Owner.Rotation = (new Quaternion((float)rot.x,(float)rot.y,(float)rot.z,(float)rot.s));
3333 } 3413 }
3334 3414
3335 public void llStopPointAt() 3415 public void llStopPointAt()
3336 { 3416 {
3337 m_host.AddScriptLPS(1); 3417 m_host.AddScriptLPS(1);
3338 NotImplemented("llStopPointAt"); 3418 ScenePresence Owner = m_host.ParentGroup.Scene.GetScenePresence(m_host.OwnerID);
3419 Owner.Rotation = Owner.PreviousRotation;
3339 } 3420 }
3340 3421
3341 public void llTargetOmega(LSL_Vector axis, double spinrate, double gain) 3422 public void llTargetOmega(LSL_Vector axis, double spinrate, double gain)
@@ -3998,13 +4079,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3998 4079
3999 UUID uuid = (UUID)id; 4080 UUID uuid = (UUID)id;
4000 4081
4001 UserProfileData userProfile = 4082 UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid);
4002 World.CommsManager.UserService.GetUserProfile(uuid);
4003 4083
4004 UserAgentData userAgent = 4084 PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() });
4005 World.CommsManager.UserService.GetAgentByUUID(uuid); 4085 PresenceInfo pinfo = PresenceInfo.GetOnlinePresence(pinfos);
4006 4086
4007 if (userProfile == null || userAgent == null) 4087 if (pinfo == null)
4008 return UUID.Zero.ToString(); 4088 return UUID.Zero.ToString();
4009 4089
4010 string reply = String.Empty; 4090 string reply = String.Empty;
@@ -4013,17 +4093,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4013 { 4093 {
4014 case 1: // DATA_ONLINE (0|1) 4094 case 1: // DATA_ONLINE (0|1)
4015 // TODO: implement fetching of this information 4095 // TODO: implement fetching of this information
4016 if (userProfile.CurrentAgent!=null && userProfile.CurrentAgent.AgentOnline) 4096 if (pinfo != null)
4017 reply = "1"; 4097 reply = "1";
4018 else 4098 else
4019 reply = "0"; 4099 reply = "0";
4020 break; 4100 break;
4021 case 2: // DATA_NAME (First Last) 4101 case 2: // DATA_NAME (First Last)
4022 reply = userProfile.FirstName + " " + userProfile.SurName; 4102 reply = account.FirstName + " " + account.LastName;
4023 break; 4103 break;
4024 case 3: // DATA_BORN (YYYY-MM-DD) 4104 case 3: // DATA_BORN (YYYY-MM-DD)
4025 DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0); 4105 DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0);
4026 born = born.AddSeconds(userProfile.Created); 4106 born = born.AddSeconds(account.Created);
4027 reply = born.ToString("yyyy-MM-dd"); 4107 reply = born.ToString("yyyy-MM-dd");
4028 break; 4108 break;
4029 case 4: // DATA_RATING (0,0,0,0,0,0) 4109 case 4: // DATA_RATING (0,0,0,0,0,0)
@@ -4138,8 +4218,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4138 public void llCollisionSound(string impact_sound, double impact_volume) 4218 public void llCollisionSound(string impact_sound, double impact_volume)
4139 { 4219 {
4140 m_host.AddScriptLPS(1); 4220 m_host.AddScriptLPS(1);
4141 //NotImplemented("llCollisionSound");
4142
4143 // TODO: Parameter check logic required. 4221 // TODO: Parameter check logic required.
4144 UUID soundId = UUID.Zero; 4222 UUID soundId = UUID.Zero;
4145 if (!UUID.TryParse(impact_sound, out soundId)) 4223 if (!UUID.TryParse(impact_sound, out soundId))
@@ -4727,8 +4805,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4727 public LSL_Vector llGetCenterOfMass() 4805 public LSL_Vector llGetCenterOfMass()
4728 { 4806 {
4729 m_host.AddScriptLPS(1); 4807 m_host.AddScriptLPS(1);
4730 NotImplemented("llGetCenterOfMass"); 4808 Vector3 center = m_host.GetGeometricCenter();
4731 return new LSL_Vector(); 4809 return new LSL_Vector(center.X,center.Y,center.Z);
4732 } 4810 }
4733 4811
4734 public LSL_List llListSort(LSL_List src, int stride, int ascending) 4812 public LSL_List llListSort(LSL_List src, int stride, int ascending)
@@ -5461,8 +5539,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5461 flags |= ScriptBaseClass.AGENT_SITTING; 5539 flags |= ScriptBaseClass.AGENT_SITTING;
5462 } 5540 }
5463 5541
5464 //NotImplemented("llGetAgentInfo");
5465
5466 return flags; 5542 return flags;
5467 } 5543 }
5468 5544
@@ -5545,7 +5621,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5545 LSL_Vector bottom_south_west) 5621 LSL_Vector bottom_south_west)
5546 { 5622 {
5547 m_host.AddScriptLPS(1); 5623 m_host.AddScriptLPS(1);
5548 NotImplemented("llTriggerSoundLimited"); 5624 float radius1 = (float)llVecDist(llGetPos(), top_north_east);
5625 float radius2 = (float)llVecDist(llGetPos(), bottom_south_west);
5626 float radius = Math.Abs(radius1 - radius2);
5627 m_host.SendSound(KeyOrName(sound).ToString(), volume, true, 0, radius, false, false);
5549 } 5628 }
5550 5629
5551 public void llEjectFromLand(string pest) 5630 public void llEjectFromLand(string pest)
@@ -6084,7 +6163,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6084 public void llGroundRepel(double height, int water, double tau) 6163 public void llGroundRepel(double height, int water, double tau)
6085 { 6164 {
6086 m_host.AddScriptLPS(1); 6165 m_host.AddScriptLPS(1);
6087 NotImplemented("llGroundRepel"); 6166 if (m_host.PhysActor != null)
6167 {
6168 float ground = (float)llGround(new LSL_Types.Vector3(0, 0, 0));
6169 float waterLevel = (float)llWater(new LSL_Types.Vector3(0, 0, 0));
6170 PIDHoverType hoverType = PIDHoverType.Ground;
6171 if (water != 0)
6172 {
6173 hoverType = PIDHoverType.GroundAndWater;
6174 if (ground < waterLevel)
6175 height += waterLevel;
6176 else
6177 height += ground;
6178 }
6179 else
6180 {
6181 height += ground;
6182 }
6183
6184 m_host.SetHoverHeight((float)height, hoverType, (float)tau);
6185 }
6088 } 6186 }
6089 6187
6090 protected UUID GetTaskInventoryItem(string name) 6188 protected UUID GetTaskInventoryItem(string name)
@@ -6219,7 +6317,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6219 { 6317 {
6220 if (!m_host.ParentGroup.IsDeleted) 6318 if (!m_host.ParentGroup.IsDeleted)
6221 { 6319 {
6222 m_host.ParentGroup.RootPart.SetVehicleFlags(flags); 6320 m_host.ParentGroup.RootPart.SetVehicleFlags(flags, false);
6223 } 6321 }
6224 } 6322 }
6225 } 6323 }
@@ -6231,7 +6329,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6231 { 6329 {
6232 if (!m_host.ParentGroup.IsDeleted) 6330 if (!m_host.ParentGroup.IsDeleted)
6233 { 6331 {
6234 m_host.ParentGroup.RootPart.RemoveVehicleFlags(flags); 6332 m_host.ParentGroup.RootPart.SetVehicleFlags(flags, true);
6235 } 6333 }
6236 } 6334 }
6237 } 6335 }
@@ -7271,7 +7369,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7271 public void llRemoteDataSetRegion() 7369 public void llRemoteDataSetRegion()
7272 { 7370 {
7273 m_host.AddScriptLPS(1); 7371 m_host.AddScriptLPS(1);
7274 NotImplemented("llRemoteDataSetRegion"); 7372 Deprecated("llRemoteDataSetRegion");
7275 } 7373 }
7276 7374
7277 public LSL_Float llLog10(double val) 7375 public LSL_Float llLog10(double val)
@@ -8409,7 +8507,39 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8409 public void llSetInventoryPermMask(string item, int mask, int value) 8507 public void llSetInventoryPermMask(string item, int mask, int value)
8410 { 8508 {
8411 m_host.AddScriptLPS(1); 8509 m_host.AddScriptLPS(1);
8412 NotImplemented("llSetInventoryPermMask"); 8510 if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false))
8511 {
8512 if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID))
8513 {
8514 lock (m_host.TaskInventory)
8515 {
8516 foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory)
8517 {
8518 if (inv.Value.Name == item)
8519 {
8520 switch (mask)
8521 {
8522 case 0:
8523 inv.Value.BasePermissions = (uint)value;
8524 break;
8525 case 1:
8526 inv.Value.CurrentPermissions = (uint)value;
8527 break;
8528 case 2:
8529 inv.Value.GroupPermissions = (uint)value;
8530 break;
8531 case 3:
8532 inv.Value.EveryonePermissions = (uint)value;
8533 break;
8534 case 4:
8535 inv.Value.NextPermissions = (uint)value;
8536 break;
8537 }
8538 }
8539 }
8540 }
8541 }
8542 }
8413 } 8543 }
8414 8544
8415 public LSL_String llGetInventoryCreator(string item) 8545 public LSL_String llGetInventoryCreator(string item)
@@ -8843,6 +8973,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8843 // we send to all 8973 // we send to all
8844 landData.MediaID = new UUID(texture); 8974 landData.MediaID = new UUID(texture);
8845 landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0; 8975 landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0;
8976 landData.MediaSize[0] = width;
8977 landData.MediaSize[1] = height;
8978 landData.MediaType = mediaType;
8846 8979
8847 // do that one last, it will cause a ParcelPropertiesUpdate 8980 // do that one last, it will cause a ParcelPropertiesUpdate
8848 landObject.SetMediaUrl(url); 8981 landObject.SetMediaUrl(url);
@@ -8902,11 +9035,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8902 m_host.AddScriptLPS(1); 9035 m_host.AddScriptLPS(1);
8903 LSL_List list = new LSL_List(); 9036 LSL_List list = new LSL_List();
8904 //TO DO: make the implementation for the missing commands 9037 //TO DO: make the implementation for the missing commands
8905 //PARCEL_MEDIA_COMMAND_TEXTURE key uuid Use this to get or set the parcel's media texture.
8906 //PARCEL_MEDIA_COMMAND_URL string url Used to get or set the parcel's media url.
8907 //PARCEL_MEDIA_COMMAND_TYPE string mime_type Use this to get or set the parcel media MIME type (e.g. "text/html"). (1.19.1 RC0 or later)
8908 //PARCEL_MEDIA_COMMAND_SIZE integer x, integer y Use this to get or set the parcel media pixel resolution. (1.19.1 RC0 or later)
8909 //PARCEL_MEDIA_COMMAND_DESC string desc Use this to get or set the parcel media description. (1.19.1 RC0 or later)
8910 //PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later) 9038 //PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later)
8911 for (int i = 0; i < aList.Data.Length; i++) 9039 for (int i = 0; i < aList.Data.Length; i++)
8912 { 9040 {
@@ -8924,6 +9052,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8924 case ParcelMediaCommandEnum.Texture: 9052 case ParcelMediaCommandEnum.Texture:
8925 list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaID.ToString())); 9053 list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaID.ToString()));
8926 break; 9054 break;
9055 case ParcelMediaCommandEnum.Type:
9056 list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaType));
9057 break;
9058 case ParcelMediaCommandEnum.Size:
9059 list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[0]));
9060 list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[1]));
9061 break;
8927 default: 9062 default:
8928 ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url; 9063 ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url;
8929 NotImplemented("llParcelMediaQuery parameter do not supported yet: " + Enum.Parse(mediaCommandEnum.GetType() , aList.Data[i].ToString()).ToString()); 9064 NotImplemented("llParcelMediaQuery parameter do not supported yet: " + Enum.Parse(mediaCommandEnum.GetType() , aList.Data[i].ToString()).ToString());