本文整理汇总了C#中IClientAPI.RunAttachmentOperation方法的典型用法代码示例。如果您正苦于以下问题:C# IClientAPI.RunAttachmentOperation方法的具体用法?C# IClientAPI.RunAttachmentOperation怎么用?C# IClientAPI.RunAttachmentOperation使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IClientAPI
的用法示例。
在下文中一共展示了IClientAPI.RunAttachmentOperation方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DetachSingleAttachmentToInv
public void DetachSingleAttachmentToInv(UUID itemID, IClientAPI remoteClient)
{
remoteClient.RunAttachmentOperation(() =>
{
ScenePresence sp = this.GetScenePresence(remoteClient.AgentId);
if (sp == null)
return;
SceneObjectGroup group = sp.GetAttachmentByItemID(itemID);
if (group == null)
return;
if (group.OwnerID != remoteClient.AgentId)
return;
this.EventManager.TriggerOnDetachObject(group.LocalId);
DetachSingleAttachmentToInvSync(itemID, remoteClient);
});
}
示例2: DetachSingleAttachmentToGround
public void DetachSingleAttachmentToGround(UUID itemID, IClientAPI remoteClient)
{
remoteClient.RunAttachmentOperation(() =>
{
SceneObjectPart part = GetSceneObjectPart(itemID);
if (part == null || part.ParentGroup == null)
return;
UUID inventoryID = part.ParentGroup.GetFromItemID();
ScenePresence presence;
if (TryGetAvatar(remoteClient.AgentId, out presence))
{
int landImpact = part.ParentGroup.LandImpact;
bool isTemp = (part.GetEffectiveObjectFlags() & PrimFlags.TemporaryOnRez) != 0;
if (!Permissions.CanRezObject(landImpact, remoteClient.AgentId, UUID.Zero, presence.AbsolutePosition, isTemp))
return;
this.EventManager.TriggerOnDetachObject(part.ParentGroup.LocalId);
presence.Appearance.DetachAttachment(itemID);
IAvatarFactory ava = RequestModuleInterface<IAvatarFactory>();
if (ava != null)
{
ava.UpdateDatabase(remoteClient.AgentId, presence.Appearance, null, null);
}
part.ParentGroup.DetachToGround();
CachedUserInfo userInfo =
CommsManager.UserService.GetUserDetails(remoteClient.AgentId);
if (userInfo != null)
{
userInfo.CheckedDeleteItem(remoteClient.AgentId, inventoryID);
remoteClient.SendRemoveInventoryItem(inventoryID);
}
}
});
}
示例3: AttachObject
public void AttachObject(IClientAPI controllingClient, uint localID, uint attachPoint, bool append, bool silent,
AttachFlags flags)
{
controllingClient.RunAttachmentOperation(() =>
{
m_sceneGraph.AttachObject(controllingClient, localID, attachPoint, append, silent, flags);
});
}
示例4: RezMultipleAttachments
public void RezMultipleAttachments(IClientAPI remoteClient, RezMultipleAttachmentsFromInvPacket.HeaderDataBlock header,
RezMultipleAttachmentsFromInvPacket.ObjectDataBlock[] objects)
{
remoteClient.RunAttachmentOperation(() =>
{
ScenePresence presence;
if (!TryGetAvatar(remoteClient.AgentId, out presence))
return;
if (header.FirstDetachAll)
{
foreach (UUID itemId in presence.CollectAttachmentItemIds())
this.DetachSingleAttachmentToInvSync(itemId, remoteClient);
this.ClearAllAttachments(presence);
}
bool updated = false;
foreach (RezMultipleAttachmentsFromInvPacket.ObjectDataBlock obj in objects)
{
bool append = (((uint)obj.AttachmentPt & 0x80) != 0); // Are we appending?
uint attachPoint = ((uint)obj.AttachmentPt & 0x7f); // And strip the append bit
// Are we already attached?
if (presence.Appearance.GetAttachmentForItem(obj.ItemID) == null)
{
SceneObjectGroup sog = RezSingleAttachmentSync(remoteClient, obj.ItemID, attachPoint, append);
if (sog != null)
updated = true;
}
}
if (updated)
{
IAvatarFactory ava = RequestModuleInterface<IAvatarFactory>();
if (ava != null)
ava.UpdateDatabase(remoteClient.AgentId, presence.Appearance, null, null);
}
});
}
示例5: RezSingleAttachment
/// <summary>
/// Rezzes a single attachment and returns UUID.Zero. Can not be called if you need the ID
/// </summary>
/// <param name="remoteClient"></param>
/// <param name="itemID"></param>
/// <param name="AttachmentPt"></param>
/// <param name="append"></param>
/// <returns></returns>
public UUID RezSingleAttachment(IClientAPI client, UUID itemID, uint AttachmentPt, bool append)
{
ScenePresence presence;
if (!TryGetAvatar(client.AgentId, out presence))
return UUID.Zero;
client.RunAttachmentOperation(() =>
{
SceneObjectGroup sog = RezSingleAttachmentSync(client, itemID, AttachmentPt, append);
if (sog != null)
{
IAvatarFactory ava = RequestModuleInterface<IAvatarFactory>();
if (ava != null)
ava.UpdateDatabase(client.AgentId, presence.Appearance, null, null);
}
});
return UUID.Zero;
}
示例6: AttachObject
/// <summary>
/// Event Handling routine for Attach Object
/// </summary>
/// <param name="remoteClient"></param>
/// <param name="objectLocalID"></param>
/// <param name="AttachmentPt"></param>
/// <param name="rot"></param>
protected internal void AttachObject(
IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, bool appendMode, Quaternion rot, bool silent)
{
remoteClient.RunAttachmentOperation(() =>
{
// If we can't take it, we can't attach it!
//
SceneObjectPart part = m_parentScene.GetSceneObjectPart(objectLocalID);
if (part == null)
return;
if (!m_parentScene.Permissions.CanTakeObject(part.ParentGroup.UUID, remoteClient.AgentId))
return;
SceneObjectGroup group = part.ParentGroup;
group.Rotation = rot;
AttachObject(remoteClient, objectLocalID, AttachmentPt, appendMode, false, AttachFlags.FromInWorld);
ScenePresence sp = m_parentScene.GetScenePresence(remoteClient.AgentId);
UUID itemID = group.GetFromItemID();
if (sp != null) sp.Appearance.SetAttachment((int)AttachmentPt, appendMode, itemID, UUID.Zero);
});
}