mirror of
https://github.com/opensim/opensim.git
synced 2026-08-10 19:36:07 +08:00
* Other then the prim update experiments that are going on now, llTakeControls works now along with the 'release controls button'. llReleaseControls() works mostly :D.
This commit is contained in:
@@ -137,6 +137,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
|
||||
public event ScriptChangedEvent OnScriptChangedEvent;
|
||||
|
||||
public delegate void ScriptControlEvent(uint localID, LLUUID item, LLUUID avatarID, uint held, uint changed);
|
||||
|
||||
public event ScriptControlEvent OnScriptControlEvent;
|
||||
|
||||
public delegate void ScriptAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 atpos);
|
||||
|
||||
public event ScriptAtTargetEvent OnScriptAtTargetEvent;
|
||||
@@ -274,6 +278,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
private DeregisterCapsEvent handlerDeregisterCaps = null; // OnDeregisterCaps;
|
||||
private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete = null;
|
||||
private RequestChangeWaterHeight handlerRequestChangeWaterHeight = null; //OnRequestChangeWaterHeight
|
||||
private ScriptControlEvent handlerScriptControlEvent = null;
|
||||
|
||||
private LandBuy handlerLandBuy = null;
|
||||
private LandBuy handlerValidateLandBuy = null;
|
||||
@@ -603,9 +608,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
internal void TriggerControlEvent(uint p, LLUUID scriptUUID, uint p_3, uint p_4)
|
||||
internal void TriggerControlEvent(uint p, LLUUID scriptUUID, LLUUID avatarID, uint held, uint _changed)
|
||||
{
|
||||
throw new Exception("The method or operation is not implemented.");
|
||||
handlerScriptControlEvent = OnScriptControlEvent;
|
||||
if (handlerScriptControlEvent != null)
|
||||
{
|
||||
handlerScriptControlEvent(p, scriptUUID, avatarID, held, _changed);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -443,6 +443,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
m_controllingClient.OnSetAlwaysRun += HandleSetAlwaysRun;
|
||||
m_controllingClient.OnStartAnim += HandleStartAnim;
|
||||
m_controllingClient.OnStopAnim += HandleStopAnim;
|
||||
m_controllingClient.OnForceReleaseControls += HandleForceReleaseControls;
|
||||
|
||||
// ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange);
|
||||
// ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement);
|
||||
@@ -2491,6 +2492,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
|
||||
|
||||
}
|
||||
public void HandleForceReleaseControls(IClientAPI remoteClient, LLUUID agentID)
|
||||
{
|
||||
IgnoredControls = ScriptControlled.CONTROL_ZERO;
|
||||
lock (scriptedcontrols)
|
||||
{
|
||||
scriptedcontrols.Clear();
|
||||
}
|
||||
ControllingClient.SendTakeControls(int.MaxValue, false, false);
|
||||
}
|
||||
|
||||
public void UnRegisterControlEventsToScript(uint Obj_localID, LLUUID Script_item_LLUUID)
|
||||
{
|
||||
@@ -2512,6 +2522,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
{
|
||||
|
||||
ScriptControlled allflags = ScriptControlled.CONTROL_ZERO;
|
||||
|
||||
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS) != 0)
|
||||
{
|
||||
allflags |= ScriptControlled.CONTROL_FWD;
|
||||
@@ -2552,6 +2563,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
{
|
||||
allflags |= ScriptControlled.CONTROL_LBUTTON;
|
||||
}
|
||||
|
||||
ScriptControlled held = ScriptControlled.CONTROL_ZERO;
|
||||
ScriptControlled change = ScriptControlled.CONTROL_ZERO;
|
||||
|
||||
@@ -2584,12 +2596,16 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
{
|
||||
ScriptControllers scriptControlData = scriptedcontrols[scriptUUID];
|
||||
ScriptControlled localHeld = held & scriptControlData.eventControls;
|
||||
//if (localHeld != ScriptControlled.CONTROL_ZERO)
|
||||
//{
|
||||
//int i = 1;
|
||||
//}
|
||||
ScriptControlled localChange = change & scriptControlData.eventControls;
|
||||
m_scene.EventManager.TriggerControlEvent(scriptControlData.objID, scriptUUID, (uint)localHeld, (uint)localChange);
|
||||
m_scene.EventManager.TriggerControlEvent(scriptControlData.objID, scriptUUID, UUID, (uint)localHeld, (uint)localChange);
|
||||
}
|
||||
}
|
||||
LastCommands = allflags;
|
||||
//foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof (Dir_ControlFlags)))
|
||||
|
||||
}
|
||||
internal uint RemoveIgnoredControls(uint flags, ScriptControlled Ignored)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user