Xengine: change allocation of executor events mask map

This commit is contained in:
UbitUmarov
2020-08-31 17:18:51 +01:00
parent b64e1792ff
commit 7364acf42e
3 changed files with 46 additions and 55 deletions

View File

@@ -45,7 +45,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
/// </summary>
protected IScript m_Script;
protected Dictionary<string, scriptEvents> m_eventFlagsMap = new Dictionary<string, scriptEvents>();
protected static readonly Dictionary<string, scriptEvents> m_eventFlagsMap = new Dictionary<string, scriptEvents>()
{
{"attach", scriptEvents.attach},
{"at_rot_target", scriptEvents.at_rot_target},
{"at_target", scriptEvents.at_target},
// {"changed",(long)scriptEvents.changed},
{"collision", scriptEvents.collision},
{"collision_end", scriptEvents.collision_end},
{"collision_start", scriptEvents.collision_start},
{"control", scriptEvents.control},
{"dataserver", scriptEvents.dataserver},
{"email", scriptEvents.email},
{"http_response", scriptEvents.http_response},
{"land_collision", scriptEvents.land_collision},
{"land_collision_end", scriptEvents.land_collision_end},
{"land_collision_start", scriptEvents.land_collision_start},
//{"link_message",scriptEvents.link_message},
{"listen", scriptEvents.listen},
{"money", scriptEvents.money},
{"moving_end", scriptEvents.moving_end},
{"moving_start", scriptEvents.moving_start},
{"not_at_rot_target", scriptEvents.not_at_rot_target},
{"not_at_target", scriptEvents.not_at_target},
//{"no_sensor",(long)scriptEvents.no_sensor},
//{"on_rez",(long)scriptEvents.on_rez},
{"remote_data", scriptEvents.remote_data},
{"run_time_permissions", scriptEvents.run_time_permissions},
//{"sensor",(long)scriptEvents.sensor},
{"state_entry", scriptEvents.state_entry},
{"state_exit", scriptEvents.state_exit},
{"timer", scriptEvents.timer},
{"touch", scriptEvents.touch},
{"touch_end", scriptEvents.touch_end},
{"touch_start", scriptEvents.touch_start},
{"transaction_result", scriptEvents.transaction_result},
{"object_rez", scriptEvents.object_rez}
};
[Flags]
public enum scriptEvents : int
@@ -91,7 +127,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
public Executor(IScript script)
{
m_Script = script;
initEventFlags();
}
public scriptEvents GetStateEventFlags(string state)
@@ -197,51 +232,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
throw;
}
}
}
protected void initEventFlags()
{
// Initialize the table if it hasn't already been done
if (m_eventFlagsMap.Count > 0)
{
return;
}
m_eventFlagsMap.Add("attach", scriptEvents.attach);
m_eventFlagsMap.Add("at_rot_target", scriptEvents.at_rot_target);
m_eventFlagsMap.Add("at_target", scriptEvents.at_target);
// m_eventFlagsMap.Add("changed",(long)scriptEvents.changed);
m_eventFlagsMap.Add("collision", scriptEvents.collision);
m_eventFlagsMap.Add("collision_end", scriptEvents.collision_end);
m_eventFlagsMap.Add("collision_start", scriptEvents.collision_start);
m_eventFlagsMap.Add("control", scriptEvents.control);
m_eventFlagsMap.Add("dataserver", scriptEvents.dataserver);
m_eventFlagsMap.Add("email", scriptEvents.email);
m_eventFlagsMap.Add("http_response", scriptEvents.http_response);
m_eventFlagsMap.Add("land_collision", scriptEvents.land_collision);
m_eventFlagsMap.Add("land_collision_end", scriptEvents.land_collision_end);
m_eventFlagsMap.Add("land_collision_start", scriptEvents.land_collision_start);
// m_eventFlagsMap.Add("link_message",scriptEvents.link_message);
m_eventFlagsMap.Add("listen", scriptEvents.listen);
m_eventFlagsMap.Add("money", scriptEvents.money);
m_eventFlagsMap.Add("moving_end", scriptEvents.moving_end);
m_eventFlagsMap.Add("moving_start", scriptEvents.moving_start);
m_eventFlagsMap.Add("not_at_rot_target", scriptEvents.not_at_rot_target);
m_eventFlagsMap.Add("not_at_target", scriptEvents.not_at_target);
// m_eventFlagsMap.Add("no_sensor",(long)scriptEvents.no_sensor);
// m_eventFlagsMap.Add("on_rez",(long)scriptEvents.on_rez);
m_eventFlagsMap.Add("remote_data", scriptEvents.remote_data);
m_eventFlagsMap.Add("run_time_permissions", scriptEvents.run_time_permissions);
// m_eventFlagsMap.Add("sensor",(long)scriptEvents.sensor);
m_eventFlagsMap.Add("state_entry", scriptEvents.state_entry);
m_eventFlagsMap.Add("state_exit", scriptEvents.state_exit);
m_eventFlagsMap.Add("timer", scriptEvents.timer);
m_eventFlagsMap.Add("touch", scriptEvents.touch);
m_eventFlagsMap.Add("touch_end", scriptEvents.touch_end);
m_eventFlagsMap.Add("touch_start", scriptEvents.touch_start);
m_eventFlagsMap.Add("transaction_result", scriptEvents.transaction_result);
m_eventFlagsMap.Add("object_rez", scriptEvents.object_rez);
}
}
}

View File

@@ -310,10 +310,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
{
m_Script.InitApi(kv.Key, kv.Value);
}
// // m_log.Debug("[Script] Script instance created");
Part.SetScriptEvents(ItemID, (int)m_Script.GetStateEventFlags(State));
}
catch (Exception e)
{
@@ -355,10 +351,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
LocalID, ItemID, ObjectID,
PluginData);
// m_log.DebugFormat("[Script] Successfully retrieved state for script {0}.{1}", PrimName, m_ScriptName);
// m_log.DebugFormat("[Script] Successfully retrieved state for script {0}.{1}", PrimName, m_ScriptName);
Part.SetScriptEvents(ItemID,
(int)m_Script.GetStateEventFlags(State));
if (!Running)
m_startOnInit = false;
@@ -398,6 +392,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
// "[SCRIPT INSTANCE]: Did not find state for script {0} for {1} ({2}) at {3} in {4}",
// ItemID, savedState, Part.Name, Part.ParentGroup.Name, Part.ParentGroup.Scene.Name);
// }
try
{
Part.SetScriptEvents(ItemID, (int)m_Script.GetStateEventFlags(State));
}
catch
{
m_log.ErrorFormat("[SCRIPT INSTANCE]: failed to SetScriptEvents {0}", ItemID);
}
return true;
}