aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs6
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs53
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs14
3 files changed, 42 insertions, 31 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 5f6b4d7..17c5f04 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -1897,9 +1897,9 @@ namespace OpenSim.Region.Environment.Scenes
1897 // remove values from aggregated script events 1897 // remove values from aggregated script events
1898 AggregateScriptEvents &= ~oldparts; 1898 AggregateScriptEvents &= ~oldparts;
1899 m_scriptEvents.Remove(scriptid); 1899 m_scriptEvents.Remove(scriptid);
1900 aggregateScriptEvents();
1900 } 1901 }
1901 } 1902 }
1902 aggregateScriptEvents();
1903 } 1903 }
1904 1904
1905 /// <summary> 1905 /// <summary>
@@ -2354,6 +2354,8 @@ namespace OpenSim.Region.Environment.Scenes
2354 // oldparts = m_scriptEvents[scriptid]; 2354 // oldparts = m_scriptEvents[scriptid];
2355 2355
2356 // remove values from aggregated script events 2356 // remove values from aggregated script events
2357 if (m_scriptEvents[scriptid] == (scriptEvents) events)
2358 return;
2357 m_scriptEvents[scriptid] = (scriptEvents) events; 2359 m_scriptEvents[scriptid] = (scriptEvents) events;
2358 } 2360 }
2359 else 2361 else
@@ -3205,6 +3207,8 @@ namespace OpenSim.Region.Environment.Scenes
3205 3207
3206 public void aggregateScriptEvents() 3208 public void aggregateScriptEvents()
3207 { 3209 {
3210 AggregateScriptEvents = 0;
3211
3208 // Aggregate script events 3212 // Aggregate script events
3209 lock (m_scriptEvents) 3213 lock (m_scriptEvents)
3210 { 3214 {
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 4b92739..1f52dc3 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -4730,98 +4730,92 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4730 switch ((int)rules.Data[i]) 4730 switch ((int)rules.Data[i])
4731 { 4731 {
4732 case (int)ScriptBaseClass.PSYS_PART_FLAGS: 4732 case (int)ScriptBaseClass.PSYS_PART_FLAGS:
4733 prules.PartDataFlags = (Primitive.ParticleSystem.ParticleDataFlags)((uint)Convert.ToInt32(rules.Data[i + 1].ToString())); 4733 prules.PartDataFlags = (Primitive.ParticleSystem.ParticleDataFlags)(uint)rules.GetLSLIntegerItem(i + 1);
4734 break; 4734 break;
4735 4735
4736 case (int)ScriptBaseClass.PSYS_PART_START_COLOR: 4736 case (int)ScriptBaseClass.PSYS_PART_START_COLOR:
4737 tempv = (LSL_Types.Vector3)rules.Data[i + 1]; 4737 tempv = rules.GetVector3Item(i + 1);
4738 prules.PartStartColor.R = (float)tempv.x; 4738 prules.PartStartColor.R = (float)tempv.x;
4739 prules.PartStartColor.G = (float)tempv.y; 4739 prules.PartStartColor.G = (float)tempv.y;
4740 prules.PartStartColor.B = (float)tempv.z; 4740 prules.PartStartColor.B = (float)tempv.z;
4741 break; 4741 break;
4742 4742
4743 case (int)ScriptBaseClass.PSYS_PART_START_ALPHA: 4743 case (int)ScriptBaseClass.PSYS_PART_START_ALPHA:
4744 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4744 tempf = (float)rules.GetLSLFloatItem(i + 1);
4745 prules.PartStartColor.A = (float)tempf; 4745 prules.PartStartColor.A = tempf;
4746 break; 4746 break;
4747 4747
4748 case (int)ScriptBaseClass.PSYS_PART_END_COLOR: 4748 case (int)ScriptBaseClass.PSYS_PART_END_COLOR:
4749 tempv = (LSL_Types.Vector3)rules.Data[i + 1]; 4749 tempv = rules.GetVector3Item(i + 1);
4750 //prules.PartEndColor = new Color4(tempv.x,tempv.y,tempv.z,1);
4751
4752 prules.PartEndColor.R = (float)tempv.x; 4750 prules.PartEndColor.R = (float)tempv.x;
4753 prules.PartEndColor.G = (float)tempv.y; 4751 prules.PartEndColor.G = (float)tempv.y;
4754 prules.PartEndColor.B = (float)tempv.z; 4752 prules.PartEndColor.B = (float)tempv.z;
4755 break; 4753 break;
4756 4754
4757 case (int)ScriptBaseClass.PSYS_PART_END_ALPHA: 4755 case (int)ScriptBaseClass.PSYS_PART_END_ALPHA:
4758 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4756 tempf = (float)rules.GetLSLFloatItem(i + 1);
4759 prules.PartEndColor.A = (float)tempf; 4757 prules.PartEndColor.A = tempf;
4760 break; 4758 break;
4761 4759
4762 case (int)ScriptBaseClass.PSYS_PART_START_SCALE: 4760 case (int)ScriptBaseClass.PSYS_PART_START_SCALE:
4763 tempv = (LSL_Types.Vector3)rules.Data[i + 1]; 4761 tempv = rules.GetVector3Item(i + 1);
4764 prules.PartStartScaleX = (float)tempv.x; 4762 prules.PartStartScaleX = (float)tempv.x;
4765 prules.PartStartScaleY = (float)tempv.y; 4763 prules.PartStartScaleY = (float)tempv.y;
4766 break; 4764 break;
4767 4765
4768 case (int)ScriptBaseClass.PSYS_PART_END_SCALE: 4766 case (int)ScriptBaseClass.PSYS_PART_END_SCALE:
4769 tempv = (LSL_Types.Vector3)rules.Data[i + 1]; 4767 tempv = rules.GetVector3Item(i + 1);
4770 prules.PartEndScaleX = (float)tempv.x; 4768 prules.PartEndScaleX = (float)tempv.x;
4771 prules.PartEndScaleY = (float)tempv.y; 4769 prules.PartEndScaleY = (float)tempv.y;
4772 break; 4770 break;
4773 4771
4774 case (int)ScriptBaseClass.PSYS_PART_MAX_AGE: 4772 case (int)ScriptBaseClass.PSYS_PART_MAX_AGE:
4775 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4773 tempf = (float)rules.GetLSLFloatItem(i + 1);
4776 prules.PartMaxAge = (float)tempf; 4774 prules.PartMaxAge = tempf;
4777 break; 4775 break;
4778 4776
4779 case (int)ScriptBaseClass.PSYS_SRC_ACCEL: 4777 case (int)ScriptBaseClass.PSYS_SRC_ACCEL:
4780 tempv = (LSL_Types.Vector3)rules.Data[i + 1]; 4778 tempv = rules.GetVector3Item(i + 1);
4781 prules.PartAcceleration.X = (float)tempv.x; 4779 prules.PartAcceleration.X = (float)tempv.x;
4782 prules.PartAcceleration.Y = (float)tempv.y; 4780 prules.PartAcceleration.Y = (float)tempv.y;
4783 prules.PartAcceleration.Z = (float)tempv.z; 4781 prules.PartAcceleration.Z = (float)tempv.z;
4784 break; 4782 break;
4785 4783
4786 case (int)ScriptBaseClass.PSYS_SRC_PATTERN: 4784 case (int)ScriptBaseClass.PSYS_SRC_PATTERN:
4787 int tmpi = int.Parse(rules.Data[i + 1].ToString()); 4785 int tmpi = (int)rules.GetLSLIntegerItem(i + 1);
4788 prules.Pattern = (Primitive.ParticleSystem.SourcePattern)tmpi; 4786 prules.Pattern = (Primitive.ParticleSystem.SourcePattern)tmpi;
4789 break; 4787 break;
4790 4788
4791 // Xantor 20080503
4792 // Wiki: PSYS_SRC_TEXTURE string inventory item name or key of the particle texture
4793 // "" = default texture.
4794 // 20080530 Updated to remove code duplication
4795 case (int)ScriptBaseClass.PSYS_SRC_TEXTURE: 4789 case (int)ScriptBaseClass.PSYS_SRC_TEXTURE:
4796 prules.Texture = KeyOrName(rules.Data[i + 1].ToString()); 4790 prules.Texture = KeyOrName(rules.GetLSLStringItem(i + 1));
4797 break; 4791 break;
4798 4792
4799 case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE: 4793 case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE:
4800 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4794 tempf = (float)rules.GetLSLFloatItem(i + 1);
4801 prules.BurstRate = (float)tempf; 4795 prules.BurstRate = (float)tempf;
4802 break; 4796 break;
4803 4797
4804 case (int)ScriptBaseClass.PSYS_SRC_BURST_PART_COUNT: 4798 case (int)ScriptBaseClass.PSYS_SRC_BURST_PART_COUNT:
4805 prules.BurstPartCount = (byte)Convert.ToByte(rules.Data[i + 1].ToString()); 4799 prules.BurstPartCount = (byte)(int)rules.GetLSLIntegerItem(i + 1);
4806 break; 4800 break;
4807 4801
4808 case (int)ScriptBaseClass.PSYS_SRC_BURST_RADIUS: 4802 case (int)ScriptBaseClass.PSYS_SRC_BURST_RADIUS:
4809 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4803 tempf = (float)rules.GetLSLFloatItem(i + 1);
4810 prules.BurstRadius = (float)tempf; 4804 prules.BurstRadius = (float)tempf;
4811 break; 4805 break;
4812 4806
4813 case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MIN: 4807 case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MIN:
4814 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4808 tempf = (float)rules.GetLSLFloatItem(i + 1);
4815 prules.BurstSpeedMin = (float)tempf; 4809 prules.BurstSpeedMin = (float)tempf;
4816 break; 4810 break;
4817 4811
4818 case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MAX: 4812 case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MAX:
4819 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4813 tempf = (float)rules.GetLSLFloatItem(i + 1);
4820 prules.BurstSpeedMax = (float)tempf; 4814 prules.BurstSpeedMax = (float)tempf;
4821 break; 4815 break;
4822 4816
4823 case (int)ScriptBaseClass.PSYS_SRC_MAX_AGE: 4817 case (int)ScriptBaseClass.PSYS_SRC_MAX_AGE:
4824 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4818 tempf = (float)rules.GetLSLFloatItem(i + 1);
4825 prules.MaxAge = (float)tempf; 4819 prules.MaxAge = (float)tempf;
4826 break; 4820 break;
4827 4821
@@ -4839,20 +4833,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4839 4833
4840 case (int)ScriptBaseClass.PSYS_SRC_OMEGA: 4834 case (int)ScriptBaseClass.PSYS_SRC_OMEGA:
4841 // AL: This is an assumption, since it is the only thing that would match. 4835 // AL: This is an assumption, since it is the only thing that would match.
4842 tempv = (LSL_Types.Vector3)rules.Data[i + 1]; 4836 tempv = rules.GetVector3Item(i + 1);
4843 prules.AngularVelocity.X = (float)tempv.x; 4837 prules.AngularVelocity.X = (float)tempv.x;
4844 prules.AngularVelocity.Y = (float)tempv.y; 4838 prules.AngularVelocity.Y = (float)tempv.y;
4845 prules.AngularVelocity.Z = (float)tempv.z; 4839 prules.AngularVelocity.Z = (float)tempv.z;
4846 //cast?? prules.MaxAge = (float)rules[i + 1];
4847 break; 4840 break;
4848 4841
4849 case (int)ScriptBaseClass.PSYS_SRC_ANGLE_BEGIN: 4842 case (int)ScriptBaseClass.PSYS_SRC_ANGLE_BEGIN:
4850 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4843 tempf = (float)rules.GetLSLFloatItem(i + 1);
4851 prules.InnerAngle = (float)tempf; 4844 prules.InnerAngle = (float)tempf;
4852 break; 4845 break;
4853 4846
4854 case (int)ScriptBaseClass.PSYS_SRC_ANGLE_END: 4847 case (int)ScriptBaseClass.PSYS_SRC_ANGLE_END:
4855 tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); 4848 tempf = (float)rules.GetLSLFloatItem(i + 1);
4856 prules.OuterAngle = (float)tempf; 4849 prules.OuterAngle = (float)tempf;
4857 break; 4850 break;
4858 } 4851 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 30002e8..24813b0 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -255,6 +255,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
255 255
256 m_Engine.Log.DebugFormat("[Script] Successfully retrieved state for script {0}.{1}", m_PrimName, m_ScriptName); 256 m_Engine.Log.DebugFormat("[Script] Successfully retrieved state for script {0}.{1}", m_PrimName, m_ScriptName);
257 257
258 part.SetScriptEvents(m_ItemID,
259 (int)m_Script.GetStateEventFlags(State));
260
258 if (m_RunEvents && (!m_ShuttingDown)) 261 if (m_RunEvents && (!m_ShuttingDown))
259 { 262 {
260 m_RunEvents = false; 263 m_RunEvents = false;
@@ -612,6 +615,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
612 m_EventQueue.Clear(); 615 m_EventQueue.Clear();
613 m_Script.ResetVars(); 616 m_Script.ResetVars();
614 m_State = "default"; 617 m_State = "default";
618
619 part.SetScriptEvents(m_ItemID,
620 (int)m_Script.GetStateEventFlags(State));
615 if (running) 621 if (running)
616 Start(); 622 Start();
617 m_SaveState = true; 623 m_SaveState = true;
@@ -631,6 +637,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
631 part.GetInventoryItem(m_ItemID).PermsGranter = UUID.Zero; 637 part.GetInventoryItem(m_ItemID).PermsGranter = UUID.Zero;
632 AsyncCommandManager async = (AsyncCommandManager)m_Engine.AsyncCommands; 638 AsyncCommandManager async = (AsyncCommandManager)m_Engine.AsyncCommands;
633 async.RemoveScript(m_LocalID, m_ItemID); 639 async.RemoveScript(m_LocalID, m_ItemID);
640
641 m_EventQueue.Clear();
642 m_Script.ResetVars();
643 m_State = "default";
644
645 part.SetScriptEvents(m_ItemID,
646 (int)m_Script.GetStateEventFlags(State));
647
634 if (m_CurrentEvent != "state_entry") 648 if (m_CurrentEvent != "state_entry")
635 { 649 {
636 m_SaveState = true; 650 m_SaveState = true;