* Rex merge, Attachments and terrain fix.
parent
24e3c71111
commit
77d3e6f51e
|
@ -234,10 +234,11 @@ namespace OpenSim.Framework
|
||||||
uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags,
|
uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags,
|
||||||
bool RezSelected, bool RemoveItem, LLUUID fromTaskID );
|
bool RezSelected, bool RemoveItem, LLUUID fromTaskID );
|
||||||
|
|
||||||
public delegate void RezSingleAttachmentFromInv(IClientAPI remoteClient, LLUUID itemID, uint AttachmentPt,
|
//Attachments
|
||||||
uint ItemFlags, uint NextOwnerMask);
|
public delegate void RezSingleAttachmentFromInv(IClientAPI remoteClient, LLUUID itemID, LLUUID ownerID,
|
||||||
|
uint itemFlags, byte attachPoint);
|
||||||
public delegate void ObjectAttach(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot);
|
public delegate void ObjectAttach(IClientAPI remoteClient, uint localID, LLQuaternion rotation, byte attachPoint);
|
||||||
|
public delegate void ObjectDetach(IClientAPI remoteClient, uint localID);
|
||||||
|
|
||||||
public delegate void ModifyTerrain(
|
public delegate void ModifyTerrain(
|
||||||
float height, float seconds, byte size, byte action, float north, float west, float south, float east,
|
float height, float seconds, byte size, byte action, float north, float west, float south, float east,
|
||||||
|
@ -419,6 +420,9 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public delegate void ObjectPermissions(IClientAPI controller, LLUUID agentID, LLUUID sessionID, byte field, uint localId, uint mask, byte set);
|
public delegate void ObjectPermissions(IClientAPI controller, LLUUID agentID, LLUUID sessionID, byte field, uint localId, uint mask, byte set);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public interface IClientAPI
|
public interface IClientAPI
|
||||||
{
|
{
|
||||||
event ImprovedInstantMessage OnInstantMessage;
|
event ImprovedInstantMessage OnInstantMessage;
|
||||||
|
@ -428,8 +432,6 @@ namespace OpenSim.Framework
|
||||||
event ModifyTerrain OnModifyTerrain;
|
event ModifyTerrain OnModifyTerrain;
|
||||||
event SetAppearance OnSetAppearance;
|
event SetAppearance OnSetAppearance;
|
||||||
event AvatarNowWearing OnAvatarNowWearing;
|
event AvatarNowWearing OnAvatarNowWearing;
|
||||||
event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
|
|
||||||
event ObjectAttach OnObjectAttach;
|
|
||||||
event StartAnim OnStartAnim;
|
event StartAnim OnStartAnim;
|
||||||
event StopAnim OnStopAnim;
|
event StopAnim OnStopAnim;
|
||||||
event LinkObjects OnLinkObjects;
|
event LinkObjects OnLinkObjects;
|
||||||
|
@ -500,6 +502,10 @@ namespace OpenSim.Framework
|
||||||
event UpdateTaskInventory OnUpdateTaskInventory;
|
event UpdateTaskInventory OnUpdateTaskInventory;
|
||||||
event RemoveTaskInventory OnRemoveTaskItem;
|
event RemoveTaskInventory OnRemoveTaskItem;
|
||||||
|
|
||||||
|
event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
|
||||||
|
event ObjectAttach OnObjectAttach;
|
||||||
|
event ObjectDetach OnObjectDetach;
|
||||||
|
|
||||||
event UUIDNameRequest OnNameFromUUIDRequest;
|
event UUIDNameRequest OnNameFromUUIDRequest;
|
||||||
|
|
||||||
event ParcelAccessListRequest OnParcelAccessListRequest;
|
event ParcelAccessListRequest OnParcelAccessListRequest;
|
||||||
|
|
|
@ -516,8 +516,6 @@ namespace OpenSim.Region.ClientStack
|
||||||
public event GenericCall2 OnRequestWearables;
|
public event GenericCall2 OnRequestWearables;
|
||||||
public event SetAppearance OnSetAppearance;
|
public event SetAppearance OnSetAppearance;
|
||||||
public event AvatarNowWearing OnAvatarNowWearing;
|
public event AvatarNowWearing OnAvatarNowWearing;
|
||||||
public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
|
|
||||||
public event ObjectAttach OnObjectAttach;
|
|
||||||
public event GenericCall2 OnCompleteMovementToRegion;
|
public event GenericCall2 OnCompleteMovementToRegion;
|
||||||
public event UpdateAgent OnAgentUpdate;
|
public event UpdateAgent OnAgentUpdate;
|
||||||
public event AgentRequestSit OnAgentRequestSit;
|
public event AgentRequestSit OnAgentRequestSit;
|
||||||
|
@ -581,6 +579,10 @@ namespace OpenSim.Region.ClientStack
|
||||||
public event UpdateTaskInventory OnUpdateTaskInventory;
|
public event UpdateTaskInventory OnUpdateTaskInventory;
|
||||||
public event RemoveTaskInventory OnRemoveTaskItem;
|
public event RemoveTaskInventory OnRemoveTaskItem;
|
||||||
|
|
||||||
|
public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
|
||||||
|
public event ObjectAttach OnObjectAttach;
|
||||||
|
public event ObjectDetach OnObjectDetach;
|
||||||
|
|
||||||
public event UUIDNameRequest OnNameFromUUIDRequest;
|
public event UUIDNameRequest OnNameFromUUIDRequest;
|
||||||
|
|
||||||
public event ParcelAccessListRequest OnParcelAccessListRequest;
|
public event ParcelAccessListRequest OnParcelAccessListRequest;
|
||||||
|
@ -2865,21 +2867,6 @@ namespace OpenSim.Region.ClientStack
|
||||||
OnAvatarNowWearing(this, wearingArgs);
|
OnAvatarNowWearing(this, wearingArgs);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PacketType.RezSingleAttachmentFromInv:
|
|
||||||
if (OnRezSingleAttachmentFromInv != null)
|
|
||||||
{
|
|
||||||
RezSingleAttachmentFromInvPacket rez = (RezSingleAttachmentFromInvPacket) Pack;
|
|
||||||
OnRezSingleAttachmentFromInv(this, rez.ObjectData.ItemID,
|
|
||||||
rez.ObjectData.AttachmentPt, rez.ObjectData.ItemFlags, rez.ObjectData.NextOwnerMask);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PacketType.ObjectAttach:
|
|
||||||
if (OnObjectAttach != null)
|
|
||||||
{
|
|
||||||
ObjectAttachPacket att = (ObjectAttachPacket) Pack;
|
|
||||||
OnObjectAttach(this, att.ObjectData[0].ObjectLocalID, att.AgentData.AttachmentPoint, att.ObjectData[0].Rotation);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PacketType.SetAlwaysRun:
|
case PacketType.SetAlwaysRun:
|
||||||
SetAlwaysRunPacket run = (SetAlwaysRunPacket)Pack;
|
SetAlwaysRunPacket run = (SetAlwaysRunPacket)Pack;
|
||||||
|
|
||||||
|
@ -3782,11 +3769,48 @@ namespace OpenSim.Region.ClientStack
|
||||||
// TODO: handle this packet
|
// TODO: handle this packet
|
||||||
m_log.Warn("[CLIENT]: unhandled InventoryDescent packet");
|
m_log.Warn("[CLIENT]: unhandled InventoryDescent packet");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region realXtend
|
||||||
|
//Attachments
|
||||||
|
case PacketType.RezSingleAttachmentFromInv:
|
||||||
|
{
|
||||||
|
RezSingleAttachmentFromInvPacket packet = (RezSingleAttachmentFromInvPacket)Pack;
|
||||||
|
|
||||||
|
OnRezSingleAttachmentFromInv(this, packet.ObjectData.ItemID, packet.ObjectData.OwnerID,
|
||||||
|
packet.ObjectData.ItemFlags, packet.ObjectData.AttachmentPt);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case PacketType.ObjectDetach:
|
||||||
|
{
|
||||||
|
ObjectDetachPacket packet = (ObjectDetachPacket)Pack;
|
||||||
|
|
||||||
|
foreach (ObjectDetachPacket.ObjectDataBlock block in packet.ObjectData)
|
||||||
|
{
|
||||||
|
OnObjectDetach(this, block.ObjectLocalID);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case PacketType.ObjectAttach:
|
||||||
|
{
|
||||||
|
ObjectAttachPacket packet = (ObjectAttachPacket)Pack;
|
||||||
|
|
||||||
|
foreach (ObjectAttachPacket.ObjectDataBlock block in packet.ObjectData)
|
||||||
|
{
|
||||||
|
OnObjectAttach(this, block.ObjectLocalID, block.Rotation, packet.AgentData.AttachmentPoint);
|
||||||
|
}
|
||||||
|
//OutPacket(packet, ThrottleOutPacketType.Task);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endregion realXtend
|
||||||
default:
|
default:
|
||||||
m_log.Warn("[CLIENT]: unhandled packet " + Pack.ToString());
|
m_log.Warn("[CLIENT]: unhandled packet " + Pack.ToString());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -499,8 +499,8 @@ namespace OpenSim.Region.Environment
|
||||||
if (splitField.Length == 3)
|
if (splitField.Length == 3)
|
||||||
{
|
{
|
||||||
Int16 corner = Convert.ToInt16(splitField[0]);
|
Int16 corner = Convert.ToInt16(splitField[0]);
|
||||||
float lowValue = (float) Convert.ToDecimal(splitField[1]);
|
float lowValue = (float)Convert.ToDouble(splitField[1].Replace('.', ','));
|
||||||
float highValue = (float) Convert.ToDecimal(splitField[2]);
|
float highValue = (float)Convert.ToDouble(splitField[2].Replace('.', ','));
|
||||||
|
|
||||||
setEstateTextureRange(corner, lowValue, highValue);
|
setEstateTextureRange(corner, lowValue, highValue);
|
||||||
}
|
}
|
||||||
|
@ -671,4 +671,4 @@ namespace OpenSim.Region.Environment
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using OpenSim.Region.Environment.Interfaces;
|
using OpenSim.Region.Environment.Interfaces;
|
||||||
|
using Axiom.Math;
|
||||||
|
|
||||||
|
|
||||||
namespace OpenSim.Region.Environment.Scenes
|
namespace OpenSim.Region.Environment.Scenes
|
||||||
|
@ -824,10 +825,84 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void RezSingleAttachment(IClientAPI remoteClient, LLUUID itemID, uint AttachmentPt,
|
protected void ObjectAttach(IClientAPI remoteClient, uint localID, LLQuaternion rotation, byte attachPoint)
|
||||||
uint ItemFlags, uint NextOwnerMask)
|
|
||||||
{
|
{
|
||||||
System.Console.WriteLine("RezSingleAttachment: unimplemented yet");
|
System.Console.WriteLine("Attaching object " + localID + " to " + attachPoint);
|
||||||
|
SceneObjectPart p = GetSceneObjectPart(localID);
|
||||||
|
ScenePresence av = null;
|
||||||
|
if (TryGetAvatar(remoteClient.AgentId, out av))
|
||||||
|
{
|
||||||
|
p.AttachToAvatar(remoteClient.AgentId, av, attachPoint, rotation, m_regInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void ObjectDetach(IClientAPI remoteClient, uint localID)
|
||||||
|
{
|
||||||
|
ScenePresence av = null;
|
||||||
|
if (TryGetAvatar(remoteClient.AgentId, out av))
|
||||||
|
{
|
||||||
|
SceneObjectPart p = GetSceneObjectPart(localID);
|
||||||
|
|
||||||
|
//Place the object in front of the avatar
|
||||||
|
Vector3 vecDir = new Vector3(1, 0, 0);
|
||||||
|
float dist = p.Scale.X + 0.1f;
|
||||||
|
vecDir = (av.Rotation * vecDir) * dist;
|
||||||
|
|
||||||
|
p.ParentGroup.AbsolutePosition = av.AbsolutePosition + new LLVector3(vecDir.x, vecDir.y, vecDir.z);
|
||||||
|
p.RotationOffset = new LLQuaternion(av.Rotation.x, av.Rotation.y, av.Rotation.z, av.Rotation.w);
|
||||||
|
p.Detach();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// MainLog.Instance.Warn("SCENE", "Object detach - Unable to find avatar " + remoteClient.FirstName + " " + remoteClient.LastName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void SingleAttachmentFromInv(IClientAPI remoteClient, LLUUID itemID, LLUUID ownerID,
|
||||||
|
uint itemFlags, byte attachPoint)
|
||||||
|
{
|
||||||
|
// MainLog.Instance.Verbose("SCENE", "SingleAttachmentFromInv for " + remoteClient.FirstName + " " + remoteClient.LastName + ": " +
|
||||||
|
// "itemID=" + itemID + " ownerID=" + ownerID + " itemFlags=" + itemFlags +
|
||||||
|
// "attachPoint=" + attachPoint);
|
||||||
|
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
|
if (userInfo != null)
|
||||||
|
{
|
||||||
|
if (userInfo.RootFolder != null)
|
||||||
|
{
|
||||||
|
InventoryItemBase item = userInfo.RootFolder.HasItem(itemID);
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
AssetBase rezAsset = AssetCache.GetAsset(item.assetID, false);
|
||||||
|
if (rezAsset != null)
|
||||||
|
{
|
||||||
|
// MainLog.Instance.Verbose("SCENE", "Adding inventory item to scene");
|
||||||
|
ScenePresence presence = GetScenePresence(remoteClient.AgentId);
|
||||||
|
|
||||||
|
SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, Helpers.FieldToUTF8String(rezAsset.Data));
|
||||||
|
group.RegenerateFullIDs();
|
||||||
|
AddEntity(group);
|
||||||
|
|
||||||
|
group.AbsolutePosition = presence.AbsolutePosition;
|
||||||
|
SceneObjectPart rootPart = group.GetChildPart(group.UUID);
|
||||||
|
rootPart.RotationOffset = new LLQuaternion(presence.Rotation.x, presence.Rotation.y, presence.Rotation.z, presence.Rotation.w);
|
||||||
|
// MainLog.Instance.Verbose("SCENE", "Attaching it to a scene presence");
|
||||||
|
rootPart.AttachToAvatar(remoteClient.AgentId, presence, attachPoint, new LLQuaternion(0, 0, 0, 1), m_regInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//MainLog.Instance.Warn("SCENE", "RezAttach - Item not found from folder");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//MainLog.Instance.Warn("SCENE", "RezAttach - No root folder found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//MainLog.Instance.Warn("SCENE", "RezAttach - Unable to get userInfo for " + remoteClient.FirstName + " " + remoteClient.LastName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1358,8 +1358,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
client.OnGrabUpdate += m_innerScene.MoveObject;
|
client.OnGrabUpdate += m_innerScene.MoveObject;
|
||||||
client.OnDeRezObject += DeRezObject;
|
client.OnDeRezObject += DeRezObject;
|
||||||
client.OnRezObject += RezObject;
|
client.OnRezObject += RezObject;
|
||||||
client.OnRezSingleAttachmentFromInv += RezSingleAttachment;
|
|
||||||
client.OnObjectAttach += m_innerScene.AttachObject;
|
|
||||||
client.OnNameFromUUIDRequest += CommsManager.HandleUUIDNameRequest;
|
client.OnNameFromUUIDRequest += CommsManager.HandleUUIDNameRequest;
|
||||||
client.OnObjectDescription += m_innerScene.PrimDescription;
|
client.OnObjectDescription += m_innerScene.PrimDescription;
|
||||||
client.OnObjectName += m_innerScene.PrimName;
|
client.OnObjectName += m_innerScene.PrimName;
|
||||||
|
@ -1412,6 +1410,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
client.OnAvatarPickerRequest += ProcessAvatarPickerRequest;
|
client.OnAvatarPickerRequest += ProcessAvatarPickerRequest;
|
||||||
client.OnPacketStats += AddPacketStats;
|
client.OnPacketStats += AddPacketStats;
|
||||||
|
|
||||||
|
|
||||||
|
client.OnRezSingleAttachmentFromInv += SingleAttachmentFromInv;
|
||||||
|
client.OnObjectAttach += ObjectAttach;
|
||||||
|
client.OnObjectDetach += ObjectDetach;
|
||||||
|
|
||||||
EventManager.TriggerOnNewClient(client);
|
EventManager.TriggerOnNewClient(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -133,8 +133,18 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private byte m_updateFlag;
|
private byte m_updateFlag;
|
||||||
|
|
||||||
|
#region realXtend
|
||||||
|
// Attachment parameters
|
||||||
|
private ScenePresence m_attachPresence = null;
|
||||||
|
private byte m_attachPt;
|
||||||
|
private LLQuaternion m_attachRot;
|
||||||
|
private RegionInfo m_attachRegInfo;
|
||||||
|
private LLUUID m_attachAgentId;
|
||||||
|
#endregion realXtend
|
||||||
|
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
public LLUUID CreatorID;
|
public LLUUID CreatorID;
|
||||||
|
|
||||||
public LLUUID ObjectCreator
|
public LLUUID ObjectCreator
|
||||||
|
@ -1470,6 +1480,25 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#region Position
|
#region Position
|
||||||
|
|
||||||
|
public void AttachToAvatar(LLUUID agentId, ScenePresence presence, byte attachPt, LLQuaternion rotation, RegionInfo regionInfo)
|
||||||
|
{
|
||||||
|
m_attachAgentId = agentId;
|
||||||
|
m_attachPresence = presence;
|
||||||
|
m_attachPt = attachPt;
|
||||||
|
m_attachRot = rotation;
|
||||||
|
m_attachRegInfo = regionInfo;
|
||||||
|
|
||||||
|
RotationOffset = new LLQuaternion(0, 0, 0, 1);
|
||||||
|
|
||||||
|
ScheduleFullUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Detach()
|
||||||
|
{
|
||||||
|
m_attachPresence = null;
|
||||||
|
ScheduleFullUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1708,9 +1737,145 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
lPos = OffsetPosition;
|
lPos = OffsetPosition;
|
||||||
SendFullUpdateToClient(remoteClient, lPos, clientflags);
|
SendFullUpdateToClient(remoteClient, lPos, clientflags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAttachedUpdateToClient(IClientAPI remoteClient, LLVector3 lPos, uint clientFlags)
|
||||||
|
{
|
||||||
|
ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
|
||||||
|
objupdate.RegionData.RegionHandle = m_attachRegInfo.RegionHandle;
|
||||||
|
objupdate.RegionData.TimeDilation = 64096;
|
||||||
|
objupdate.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[2];
|
||||||
|
|
||||||
|
// avatar stuff - horrible group copypaste
|
||||||
|
objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock();
|
||||||
|
objupdate.ObjectData[0].PSBlock = new byte[0];
|
||||||
|
objupdate.ObjectData[0].ExtraParams = new byte[1];
|
||||||
|
objupdate.ObjectData[0].MediaURL = new byte[0];
|
||||||
|
objupdate.ObjectData[0].NameValue = new byte[0];
|
||||||
|
objupdate.ObjectData[0].Text = new byte[0];
|
||||||
|
objupdate.ObjectData[0].TextColor = new byte[4];
|
||||||
|
objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0, 0, 0);
|
||||||
|
objupdate.ObjectData[0].JointPivot = new LLVector3(0, 0, 0);
|
||||||
|
objupdate.ObjectData[0].Material = 4;
|
||||||
|
objupdate.ObjectData[0].TextureAnim = new byte[0];
|
||||||
|
objupdate.ObjectData[0].Sound = LLUUID.Zero;
|
||||||
|
|
||||||
|
objupdate.ObjectData[0].State = 0;
|
||||||
|
objupdate.ObjectData[0].Data = new byte[0];
|
||||||
|
|
||||||
|
objupdate.ObjectData[0].ObjectData = new byte[76];
|
||||||
|
objupdate.ObjectData[0].ObjectData[15] = 128;
|
||||||
|
objupdate.ObjectData[0].ObjectData[16] = 63;
|
||||||
|
objupdate.ObjectData[0].ObjectData[56] = 128;
|
||||||
|
objupdate.ObjectData[0].ObjectData[61] = 102;
|
||||||
|
objupdate.ObjectData[0].ObjectData[62] = 40;
|
||||||
|
objupdate.ObjectData[0].ObjectData[63] = 61;
|
||||||
|
objupdate.ObjectData[0].ObjectData[64] = 189;
|
||||||
|
|
||||||
|
|
||||||
|
objupdate.ObjectData[0].UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24);
|
||||||
|
objupdate.ObjectData[0].PathCurve = 16;
|
||||||
|
objupdate.ObjectData[0].ProfileCurve = 1;
|
||||||
|
objupdate.ObjectData[0].PathScaleX = 100;
|
||||||
|
objupdate.ObjectData[0].PathScaleY = 100;
|
||||||
|
objupdate.ObjectData[0].ParentID = 0;
|
||||||
|
objupdate.ObjectData[0].OwnerID = LLUUID.Zero;
|
||||||
|
objupdate.ObjectData[0].Scale = new LLVector3(1, 1, 1);
|
||||||
|
objupdate.ObjectData[0].PCode = 47;
|
||||||
|
objupdate.ObjectData[0].TextureEntry = ScenePresence.DefaultTexture;
|
||||||
|
|
||||||
|
objupdate.ObjectData[0].ID = m_attachPresence.LocalId;
|
||||||
|
objupdate.ObjectData[0].FullID = m_attachAgentId;
|
||||||
|
objupdate.ObjectData[0].ParentID = 0;
|
||||||
|
objupdate.ObjectData[0].NameValue =
|
||||||
|
Helpers.StringToField("FirstName STRING RW SV " + m_attachPresence.Firstname + "\nLastName STRING RW SV " + m_attachPresence.Lastname);
|
||||||
|
LLVector3 pos2 = m_attachPresence.AbsolutePosition;
|
||||||
|
// new LLVector3((float) Pos.X, (float) Pos.Y, (float) Pos.Z);
|
||||||
|
byte[] pb = pos2.GetBytes();
|
||||||
|
Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
|
||||||
|
|
||||||
|
|
||||||
|
// primitive part
|
||||||
|
objupdate.ObjectData[1] = new ObjectUpdatePacket.ObjectDataBlock();
|
||||||
|
// SetDefaultPrimPacketValues
|
||||||
|
objupdate.ObjectData[1].PSBlock = new byte[0];
|
||||||
|
objupdate.ObjectData[1].ExtraParams = new byte[1];
|
||||||
|
objupdate.ObjectData[1].MediaURL = new byte[0];
|
||||||
|
objupdate.ObjectData[1].NameValue = new byte[0];
|
||||||
|
objupdate.ObjectData[1].Text = new byte[0];
|
||||||
|
objupdate.ObjectData[1].TextColor = new byte[4];
|
||||||
|
objupdate.ObjectData[1].JointAxisOrAnchor = new LLVector3(0, 0, 0);
|
||||||
|
objupdate.ObjectData[1].JointPivot = new LLVector3(0, 0, 0);
|
||||||
|
objupdate.ObjectData[1].Material = 3;
|
||||||
|
objupdate.ObjectData[1].TextureAnim = new byte[0];
|
||||||
|
objupdate.ObjectData[1].Sound = LLUUID.Zero;
|
||||||
|
objupdate.ObjectData[1].State = 0;
|
||||||
|
objupdate.ObjectData[1].Data = new byte[0];
|
||||||
|
|
||||||
|
objupdate.ObjectData[1].ObjectData = new byte[60];
|
||||||
|
objupdate.ObjectData[1].ObjectData[46] = 128;
|
||||||
|
objupdate.ObjectData[1].ObjectData[47] = 63;
|
||||||
|
|
||||||
|
// SetPrimPacketShapeData
|
||||||
|
PrimitiveBaseShape primData = Shape;
|
||||||
|
|
||||||
|
objupdate.ObjectData[1].TextureEntry = primData.TextureEntry;
|
||||||
|
objupdate.ObjectData[1].PCode = primData.PCode;
|
||||||
|
objupdate.ObjectData[1].State = (byte)(((byte)m_attachPt) << 4);
|
||||||
|
objupdate.ObjectData[1].PathBegin = primData.PathBegin;
|
||||||
|
objupdate.ObjectData[1].PathEnd = primData.PathEnd;
|
||||||
|
objupdate.ObjectData[1].PathScaleX = primData.PathScaleX;
|
||||||
|
objupdate.ObjectData[1].PathScaleY = primData.PathScaleY;
|
||||||
|
objupdate.ObjectData[1].PathShearX = primData.PathShearX;
|
||||||
|
objupdate.ObjectData[1].PathShearY = primData.PathShearY;
|
||||||
|
objupdate.ObjectData[1].PathSkew = primData.PathSkew;
|
||||||
|
objupdate.ObjectData[1].ProfileBegin = primData.ProfileBegin;
|
||||||
|
objupdate.ObjectData[1].ProfileEnd = primData.ProfileEnd;
|
||||||
|
objupdate.ObjectData[1].Scale = primData.Scale;
|
||||||
|
objupdate.ObjectData[1].PathCurve = primData.PathCurve;
|
||||||
|
objupdate.ObjectData[1].ProfileCurve = primData.ProfileCurve;
|
||||||
|
objupdate.ObjectData[1].ProfileHollow = primData.ProfileHollow;
|
||||||
|
objupdate.ObjectData[1].PathRadiusOffset = primData.PathRadiusOffset;
|
||||||
|
objupdate.ObjectData[1].PathRevolutions = primData.PathRevolutions;
|
||||||
|
objupdate.ObjectData[1].PathTaperX = primData.PathTaperX;
|
||||||
|
objupdate.ObjectData[1].PathTaperY = primData.PathTaperY;
|
||||||
|
objupdate.ObjectData[1].PathTwist = primData.PathTwist;
|
||||||
|
objupdate.ObjectData[1].PathTwistBegin = primData.PathTwistBegin;
|
||||||
|
objupdate.ObjectData[1].ExtraParams = primData.ExtraParams;
|
||||||
|
|
||||||
|
objupdate.ObjectData[1].UpdateFlags = 276957500; // flags; // ??
|
||||||
|
objupdate.ObjectData[1].ID = LocalID;
|
||||||
|
objupdate.ObjectData[1].FullID = UUID;
|
||||||
|
objupdate.ObjectData[1].OwnerID = OwnerID;
|
||||||
|
objupdate.ObjectData[1].Text = Helpers.StringToField(Text);
|
||||||
|
objupdate.ObjectData[1].TextColor[0] = 255;
|
||||||
|
objupdate.ObjectData[1].TextColor[1] = 255;
|
||||||
|
objupdate.ObjectData[1].TextColor[2] = 255;
|
||||||
|
objupdate.ObjectData[1].TextColor[3] = 128;
|
||||||
|
objupdate.ObjectData[1].ParentID = objupdate.ObjectData[0].ID;
|
||||||
|
//objupdate.ObjectData[1].PSBlock = particleSystem;
|
||||||
|
//objupdate.ObjectData[1].ClickAction = clickAction;
|
||||||
|
objupdate.ObjectData[1].Radius = 20;
|
||||||
|
objupdate.ObjectData[1].NameValue =
|
||||||
|
Helpers.StringToField("AttachItemID STRING RW SV " + UUID);
|
||||||
|
LLVector3 pos = new LLVector3((float)0.0, (float)0.0, (float)0.0);
|
||||||
|
|
||||||
|
pb = pos.GetBytes();
|
||||||
|
Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length);
|
||||||
|
|
||||||
|
byte[] brot = m_attachRot.GetBytes();
|
||||||
|
Array.Copy(brot, 0, objupdate.ObjectData[1].ObjectData, 36, brot.Length);
|
||||||
|
|
||||||
|
remoteClient.OutPacket(objupdate, ThrottleOutPacketType.Task);
|
||||||
|
}
|
||||||
|
|
||||||
public void SendFullUpdateToClient(IClientAPI remoteClient, LLVector3 lPos, uint clientFlags)
|
public void SendFullUpdateToClient(IClientAPI remoteClient, LLVector3 lPos, uint clientFlags)
|
||||||
{
|
{
|
||||||
|
if (m_attachPresence != null)
|
||||||
|
{
|
||||||
|
SendAttachedUpdateToClient(remoteClient, lPos, clientFlags);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
LLQuaternion lRot;
|
LLQuaternion lRot;
|
||||||
lRot = RotationOffset;
|
lRot = RotationOffset;
|
||||||
clientFlags &= ~(uint) LLObject.ObjectFlags.CreateSelected;
|
clientFlags &= ~(uint) LLObject.ObjectFlags.CreateSelected;
|
||||||
|
|
|
@ -58,8 +58,6 @@ namespace SimpleApp
|
||||||
public event ModifyTerrain OnModifyTerrain;
|
public event ModifyTerrain OnModifyTerrain;
|
||||||
public event SetAppearance OnSetAppearance;
|
public event SetAppearance OnSetAppearance;
|
||||||
public event AvatarNowWearing OnAvatarNowWearing;
|
public event AvatarNowWearing OnAvatarNowWearing;
|
||||||
public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
|
|
||||||
public event ObjectAttach OnObjectAttach;
|
|
||||||
public event StartAnim OnStartAnim;
|
public event StartAnim OnStartAnim;
|
||||||
public event StopAnim OnStopAnim;
|
public event StopAnim OnStopAnim;
|
||||||
public event LinkObjects OnLinkObjects;
|
public event LinkObjects OnLinkObjects;
|
||||||
|
@ -129,6 +127,10 @@ namespace SimpleApp
|
||||||
public event UpdateTaskInventory OnUpdateTaskInventory;
|
public event UpdateTaskInventory OnUpdateTaskInventory;
|
||||||
public event RemoveTaskInventory OnRemoveTaskItem;
|
public event RemoveTaskInventory OnRemoveTaskItem;
|
||||||
|
|
||||||
|
public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
|
||||||
|
public event ObjectAttach OnObjectAttach;
|
||||||
|
public event ObjectDetach OnObjectDetach;
|
||||||
|
|
||||||
public event UUIDNameRequest OnNameFromUUIDRequest;
|
public event UUIDNameRequest OnNameFromUUIDRequest;
|
||||||
|
|
||||||
public event ParcelPropertiesRequest OnParcelPropertiesRequest;
|
public event ParcelPropertiesRequest OnParcelPropertiesRequest;
|
||||||
|
|
Loading…
Reference in New Issue