* Patch #1026 - llDialog support -- Thanks Melanie!
parent
73d765901e
commit
3370d581e1
|
@ -440,6 +440,8 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public delegate void ObjectIncludeInSearch(IClientAPI remoteClient, bool IncludeInSearch, uint localID);
|
public delegate void ObjectIncludeInSearch(IClientAPI remoteClient, bool IncludeInSearch, uint localID);
|
||||||
|
|
||||||
|
public delegate void ScriptAnswer(IClientAPI remoteClient, LLUUID objectID, LLUUID itemID, int answer);
|
||||||
|
|
||||||
public interface IClientAPI
|
public interface IClientAPI
|
||||||
{
|
{
|
||||||
event ImprovedInstantMessage OnInstantMessage;
|
event ImprovedInstantMessage OnInstantMessage;
|
||||||
|
@ -559,7 +561,8 @@ namespace OpenSim.Framework
|
||||||
event ObjectIncludeInSearch OnObjectIncludeInSearch;
|
event ObjectIncludeInSearch OnObjectIncludeInSearch;
|
||||||
|
|
||||||
event UUIDNameRequest OnTeleportHomeRequest;
|
event UUIDNameRequest OnTeleportHomeRequest;
|
||||||
|
|
||||||
|
event ScriptAnswer OnScriptAnswer;
|
||||||
|
|
||||||
LLVector3 StartPos { get; set; }
|
LLVector3 StartPos { get; set; }
|
||||||
|
|
||||||
|
@ -695,6 +698,7 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
void SendAvatarProperties(LLUUID avatarID, string aboutText, string bornOn, string charterMember, string flAbout,
|
void SendAvatarProperties(LLUUID avatarID, string aboutText, string bornOn, string charterMember, string flAbout,
|
||||||
uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, LLUUID partnerID);
|
uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, LLUUID partnerID);
|
||||||
|
void SendScriptQuestion(LLUUID taskID, string taskName, string ownerName, LLUUID itemID, int question);
|
||||||
|
|
||||||
byte[] GetThrottlesPacked(float multiplier);
|
byte[] GetThrottlesPacked(float multiplier);
|
||||||
|
|
||||||
|
|
|
@ -233,6 +233,7 @@ namespace OpenSim.Region.ClientStack
|
||||||
private RequestAsset handlerRequestAsset = null; // OnRequestAsset;
|
private RequestAsset handlerRequestAsset = null; // OnRequestAsset;
|
||||||
private UUIDNameRequest handlerTeleportHomeRequest = null;
|
private UUIDNameRequest handlerTeleportHomeRequest = null;
|
||||||
|
|
||||||
|
private ScriptAnswer handlerScriptAnswer = null;
|
||||||
|
|
||||||
/* Properties */
|
/* Properties */
|
||||||
|
|
||||||
|
@ -789,6 +790,8 @@ namespace OpenSim.Region.ClientStack
|
||||||
|
|
||||||
public event UUIDNameRequest OnTeleportHomeRequest;
|
public event UUIDNameRequest OnTeleportHomeRequest;
|
||||||
|
|
||||||
|
public event ScriptAnswer OnScriptAnswer;
|
||||||
|
|
||||||
#region Scene/Avatar to Client
|
#region Scene/Avatar to Client
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2484,6 +2487,20 @@ namespace OpenSim.Region.ClientStack
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendScriptQuestion(LLUUID taskID, string taskName, string ownerName, LLUUID itemID, int question)
|
||||||
|
{
|
||||||
|
ScriptQuestionPacket scriptQuestion = (ScriptQuestionPacket)PacketPool.Instance.GetPacket(PacketType.ScriptQuestion);
|
||||||
|
scriptQuestion.Data = new ScriptQuestionPacket.DataBlock();
|
||||||
|
// TODO: don't create new blocks if recycling an old packet
|
||||||
|
scriptQuestion.Data.TaskID = taskID;
|
||||||
|
scriptQuestion.Data.ItemID = itemID;
|
||||||
|
scriptQuestion.Data.Questions = question;
|
||||||
|
scriptQuestion.Data.ObjectName = Helpers.StringToField(taskName);
|
||||||
|
scriptQuestion.Data.ObjectOwner = Helpers.StringToField(ownerName);
|
||||||
|
|
||||||
|
OutPacket(scriptQuestion, ThrottleOutPacketType.Task);
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual bool Logout(IClientAPI client, Packet packet)
|
protected virtual bool Logout(IClientAPI client, Packet packet)
|
||||||
{
|
{
|
||||||
m_log.Info("[CLIENT]: Got a logout request");
|
m_log.Info("[CLIENT]: Got a logout request");
|
||||||
|
@ -3838,6 +3855,16 @@ namespace OpenSim.Region.ClientStack
|
||||||
handlerObjectIncludeInSearch(this, inSearch, localID);
|
handlerObjectIncludeInSearch(this, inSearch, localID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PacketType.ScriptAnswerYes:
|
||||||
|
ScriptAnswerYesPacket scriptAnswer = (ScriptAnswerYesPacket)Pack;
|
||||||
|
|
||||||
|
handlerScriptAnswer = OnScriptAnswer;
|
||||||
|
if (handlerScriptAnswer != null)
|
||||||
|
{
|
||||||
|
handlerScriptAnswer(this, scriptAnswer.Data.TaskID, scriptAnswer.Data.ItemID, scriptAnswer.Data.Questions);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -166,6 +166,8 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public event ObjectIncludeInSearch OnObjectIncludeInSearch;
|
public event ObjectIncludeInSearch OnObjectIncludeInSearch;
|
||||||
public event UUIDNameRequest OnTeleportHomeRequest;
|
public event UUIDNameRequest OnTeleportHomeRequest;
|
||||||
|
|
||||||
|
public event ScriptAnswer OnScriptAnswer;
|
||||||
|
|
||||||
|
|
||||||
#pragma warning restore 67
|
#pragma warning restore 67
|
||||||
|
|
||||||
|
@ -593,5 +595,9 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public void SetClientInfo(ClientInfo info)
|
public void SetClientInfo(ClientInfo info)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendScriptQuestion(LLUUID objectID, string taskName, string ownerName, LLUUID itemID, int question)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,8 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
|
|
||||||
private DateTime m_timer = DateTime.Now;
|
private DateTime m_timer = DateTime.Now;
|
||||||
private string m_state = "default";
|
private string m_state = "default";
|
||||||
|
private bool m_waitingForScriptAnswer=false;
|
||||||
|
|
||||||
|
|
||||||
public string State
|
public string State
|
||||||
{
|
{
|
||||||
|
@ -1950,11 +1952,6 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
|
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
// Cannot combine debit with anything else since the new debit perms dialog has been introduced.
|
|
||||||
if((perm & BuiltIn_Commands_BaseClass.PERMISSION_DEBIT) != 0 &&
|
|
||||||
perm != BuiltIn_Commands_BaseClass.PERMISSION_DEBIT)
|
|
||||||
perm &= ~BuiltIn_Commands_BaseClass.PERMISSION_DEBIT;// Silently ignore debit request
|
|
||||||
|
|
||||||
bool attachment=false; // Attachments not implemented yet. TODO: reflect real attachemnt state
|
bool attachment=false; // Attachments not implemented yet. TODO: reflect real attachemnt state
|
||||||
|
|
||||||
if(attachment && agent == m_host.OwnerID)
|
if(attachment && agent == m_host.OwnerID)
|
||||||
|
@ -1993,15 +1990,48 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Implement perms dialog sending
|
if (World.m_innerScene.ScenePresences.ContainsKey(agentID))
|
||||||
|
{
|
||||||
|
string ownerName=resolveName(m_host.ParentGroup.RootPart.OwnerID);
|
||||||
|
if(ownerName == String.Empty)
|
||||||
|
ownerName="(hippos)";
|
||||||
|
|
||||||
// Refuse perms for now
|
ScenePresence presence = World.m_innerScene.ScenePresences[agentID];
|
||||||
|
if(!m_waitingForScriptAnswer)
|
||||||
|
{
|
||||||
|
m_host.TaskInventory[invItemID].PermsGranter=agentID;
|
||||||
|
m_host.TaskInventory[invItemID].PermsMask=0;
|
||||||
|
presence.ControllingClient.OnScriptAnswer+=handleScriptAnswer;
|
||||||
|
m_waitingForScriptAnswer=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
presence.ControllingClient.SendScriptQuestion(m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, invItemID, perm);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Requested agent is not in range, refuse perms
|
||||||
m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
|
m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
|
||||||
m_localID, m_itemID, "run_time_permissions", EventQueueManager.llDetectNull, new Object[] {(int)0});
|
m_localID, m_itemID, "run_time_permissions", EventQueueManager.llDetectNull, new Object[] {(int)0});
|
||||||
|
|
||||||
NotImplemented("llRequestPermissions");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handleScriptAnswer(IClientAPI client, LLUUID taskID, LLUUID itemID, int answer)
|
||||||
|
{
|
||||||
|
if(taskID != m_host.UUID)
|
||||||
|
return;
|
||||||
|
|
||||||
|
LLUUID invItemID=InventorySelf();
|
||||||
|
|
||||||
|
if(invItemID == LLUUID.Zero)
|
||||||
|
return;
|
||||||
|
|
||||||
|
client.OnScriptAnswer-=handleScriptAnswer;
|
||||||
|
m_waitingForScriptAnswer=false;
|
||||||
|
|
||||||
|
m_host.TaskInventory[invItemID].PermsMask=answer;
|
||||||
|
m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
|
||||||
|
m_localID, m_itemID, "run_time_permissions", EventQueueManager.llDetectNull, new Object[] {(int)answer});
|
||||||
|
}
|
||||||
|
|
||||||
public string llGetPermissionsKey()
|
public string llGetPermissionsKey()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
@ -3924,9 +3954,24 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
LSLError("First parameter to llDialog needs to be a key");
|
LSLError("First parameter to llDialog needs to be a key");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(buttons.Length > 12)
|
||||||
|
{
|
||||||
|
LSLError("No more than 12 buttons can be shown");
|
||||||
|
return;
|
||||||
|
}
|
||||||
string[] buts = new string[buttons.Length];
|
string[] buts = new string[buttons.Length];
|
||||||
for(int i = 0; i < buttons.Length; i++)
|
for(int i = 0; i < buttons.Length; i++)
|
||||||
{
|
{
|
||||||
|
if(buttons.Data[i].ToString() == String.Empty)
|
||||||
|
{
|
||||||
|
LSLError("button label cannot be blank");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(buttons.Data[i].ToString().Length > 24)
|
||||||
|
{
|
||||||
|
LSLError("button label cannot be longer than 24 characters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
buts[i] = buttons.Data[i].ToString();
|
buts[i] = buttons.Data[i].ToString();
|
||||||
}
|
}
|
||||||
World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new LLUUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts);
|
World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new LLUUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts);
|
||||||
|
|
Loading…
Reference in New Issue