From b2eb26e4babbf87c8db84e67de116ef145feb2d6 Mon Sep 17 00:00:00 2001
From: MW
Date: Tue, 29 May 2007 09:16:18 +0000
Subject: number of changes
---
OpenSim/OpenSim.RegionServer/ClientView.API.cs | 198 ++++++++++++++++++++++++-
1 file changed, 197 insertions(+), 1 deletion(-)
(limited to 'OpenSim/OpenSim.RegionServer/ClientView.API.cs')
diff --git a/OpenSim/OpenSim.RegionServer/ClientView.API.cs b/OpenSim/OpenSim.RegionServer/ClientView.API.cs
index 579928c..55ff8a1 100644
--- a/OpenSim/OpenSim.RegionServer/ClientView.API.cs
+++ b/OpenSim/OpenSim.RegionServer/ClientView.API.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Inventory;
+using OpenSim.Framework.Types;
using libsecondlife;
using libsecondlife.Packets;
@@ -32,6 +33,8 @@ namespace OpenSim
public event UpdatePrimVector OnUpdatePrimScale;
public event StatusChange OnChildAgentStatus;
public event GenericCall2 OnStopMovement;
+ public event NewAvatar OnNewAvatar;
+ public event GenericCall6 OnRemoveAvatar;
public LLVector3 StartPos
{
@@ -70,7 +73,7 @@ namespace OpenSim
this.OutPacket(reply);
}
- public void SendAppearance(AvatarWearable[] wearables)
+ public void SendWearables(AvatarWearable[] wearables)
{
AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket();
aw.AgentData.AgentID = this.AgentID;
@@ -90,6 +93,199 @@ namespace OpenSim
this.OutPacket(aw);
}
+
+ public void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry)
+ {
+ AvatarAppearancePacket avp = new AvatarAppearancePacket();
+ avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
+ avp.ObjectData.TextureEntry = textureEntry;
+
+ AvatarAppearancePacket.VisualParamBlock avblock = null;
+ for (int i = 0; i < 218; i++)
+ {
+ avblock = new AvatarAppearancePacket.VisualParamBlock();
+ avblock.ParamValue = visualParams[i];
+ avp.VisualParam[i] = avblock;
+ }
+
+ avp.Sender.IsTrial = false;
+ avp.Sender.ID = agentID;
+ OutPacket(avp);
+ }
+
+ ///
+ /// Send the region heightmap to the client
+ ///
+ /// heightmap
+ public virtual void SendLayerData(float[] map)
+ {
+ try
+ {
+ int[] patches = new int[4];
+
+ for (int y = 0; y < 16; y++)
+ {
+ for (int x = 0; x < 16; x = x + 4)
+ {
+ patches[0] = x + 0 + y * 16;
+ patches[1] = x + 1 + y * 16;
+ patches[2] = x + 2 + y * 16;
+ patches[3] = x + 3 + y * 16;
+
+ Packet layerpack = TerrainManager.CreateLandPacket(map, patches);
+ OutPacket(layerpack);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "ClientView API.cs: SendLayerData() - Failed with exception " + e.ToString());
+ }
+ }
+
+ ///
+ /// Sends a specified patch to a client
+ ///
+ /// Patch coordinate (x) 0..16
+ /// Patch coordinate (y) 0..16
+ /// heightmap
+ public void SendLayerData(int px, int py, float[] map)
+ {
+ try
+ {
+ int[] patches = new int[1];
+ int patchx, patchy;
+ patchx = px / 16;
+ patchy = py / 16;
+
+ patches[0] = patchx + 0 + patchy * 16;
+
+ Packet layerpack = TerrainManager.CreateLandPacket(map, patches);
+ OutPacket(layerpack);
+ }
+ catch (Exception e)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "ClientView API .cs: SendLayerData() - Failed with exception " + e.ToString());
+ }
+ }
+
+ public void SendRegionHandshake(RegionInfo regionInfo)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.VERBOSE, "Avatar.cs:SendRegionHandshake() - Creating empty RegionHandshake packet");
+ System.Text.Encoding _enc = System.Text.Encoding.ASCII;
+ RegionHandshakePacket handshake = new RegionHandshakePacket();
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.VERBOSE, "Avatar.cs:SendRegionhandshake() - Filling in RegionHandshake details");
+ handshake.RegionInfo.BillableFactor = 0;
+ handshake.RegionInfo.IsEstateManager = false;
+ handshake.RegionInfo.TerrainHeightRange00 = regionInfo.TerrainHeightRange00;
+ handshake.RegionInfo.TerrainHeightRange01 = regionInfo.TerrainHeightRange01;
+ handshake.RegionInfo.TerrainHeightRange10 = regionInfo.TerrainHeightRange10;
+ handshake.RegionInfo.TerrainHeightRange11 = regionInfo.TerrainHeightRange11;
+ handshake.RegionInfo.TerrainStartHeight00 = regionInfo.TerrainStartHeight00;
+ handshake.RegionInfo.TerrainStartHeight01 = regionInfo.TerrainStartHeight01;
+ handshake.RegionInfo.TerrainStartHeight10 = regionInfo.TerrainStartHeight10;
+ handshake.RegionInfo.TerrainStartHeight11 = regionInfo.TerrainStartHeight11;
+ handshake.RegionInfo.SimAccess = 13;
+ handshake.RegionInfo.WaterHeight = regionInfo.RegionWaterHeight;
+ uint regionFlags = 72458694;
+ if (regionInfo.RegionTerraform)
+ {
+ regionFlags -= 64;
+ }
+ handshake.RegionInfo.RegionFlags = regionFlags;
+ handshake.RegionInfo.SimName = _enc.GetBytes(regionInfo.RegionName + "\0");
+ handshake.RegionInfo.SimOwner = new LLUUID("00000000-0000-0000-0000-000000000000");
+ handshake.RegionInfo.TerrainBase0 = regionInfo.TerrainBase0;
+ handshake.RegionInfo.TerrainBase1 = regionInfo.TerrainBase1;
+ handshake.RegionInfo.TerrainBase2 = regionInfo.TerrainBase2;
+ handshake.RegionInfo.TerrainBase3 = regionInfo.TerrainBase3;
+ handshake.RegionInfo.TerrainDetail0 = regionInfo.TerrainDetail0;
+ handshake.RegionInfo.TerrainDetail1 = regionInfo.TerrainDetail1;
+ handshake.RegionInfo.TerrainDetail2 = regionInfo.TerrainDetail2;
+ handshake.RegionInfo.TerrainDetail3 = regionInfo.TerrainDetail3;
+ handshake.RegionInfo.CacheID = new LLUUID("545ec0a5-5751-1026-8a0b-216e38a7ab37");
+
+ OutPacket(handshake);
+ }
+
+ public void SendAvatarData(RegionInfo regionInfo, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID, LLVector3 Pos)
+ {
+ System.Text.Encoding _enc = System.Text.Encoding.ASCII;
+ //send a objectupdate packet with information about the clients avatar
+
+ ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
+ objupdate.RegionData.RegionHandle = regionInfo.RegionHandle;
+ objupdate.RegionData.TimeDilation = 64096;
+ objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
+ objupdate.ObjectData[0] = this.CreateDefaultAvatarPacket();
+ //give this avatar object a local id and assign the user a name
+
+ objupdate.ObjectData[0].ID = avatarLocalID;
+ objupdate.ObjectData[0].FullID = avatarID;
+ objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstName + "\nLastName STRING RW SV " + lastName + " \0");
+ libsecondlife.LLVector3 pos2 = 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);
+
+ OutPacket(objupdate);
+
+ }
+
+ protected void SetDefaultPacketValues(ref ObjectUpdatePacket.ObjectDataBlock objdata)
+ {
+ objdata.PSBlock = new byte[0];
+ objdata.ExtraParams = new byte[1];
+ objdata.MediaURL = new byte[0];
+ objdata.NameValue = new byte[0];
+ objdata.Text = new byte[0];
+ objdata.TextColor = new byte[4];
+ objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0);
+ objdata.JointPivot = new LLVector3(0, 0, 0);
+ objdata.Material = 4;
+ objdata.TextureAnim = new byte[0];
+ objdata.Sound = LLUUID.Zero;
+ LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
+ objdata.TextureEntry = ntex.ToBytes();
+ objdata.State = 0;
+ objdata.Data = new byte[0];
+
+ objdata.ObjectData = new byte[76];
+ objdata.ObjectData[15] = 128;
+ objdata.ObjectData[16] = 63;
+ objdata.ObjectData[56] = 128;
+ objdata.ObjectData[61] = 102;
+ objdata.ObjectData[62] = 40;
+ objdata.ObjectData[63] = 61;
+ objdata.ObjectData[64] = 189;
+ }
+
+ protected ObjectUpdatePacket.ObjectDataBlock CreateDefaultAvatarPacket()
+ {
+ libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata = new ObjectUpdatePacket.ObjectDataBlock(); // new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i);
+
+ SetDefaultPacketValues(ref objdata);
+ objdata.UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24);
+ objdata.PathCurve = 16;
+ objdata.ProfileCurve = 1;
+ objdata.PathScaleX = 100;
+ objdata.PathScaleY = 100;
+ objdata.ParentID = 0;
+ objdata.OwnerID = LLUUID.Zero;
+ objdata.Scale = new LLVector3(1, 1, 1);
+ objdata.PCode = 47;
+ System.Text.Encoding enc = System.Text.Encoding.ASCII;
+ libsecondlife.LLVector3 pos = new LLVector3(objdata.ObjectData, 16);
+ pos.X = 100f;
+ objdata.ID = 8880000;
+ objdata.NameValue = enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0");
+ libsecondlife.LLVector3 pos2 = new LLVector3(100f, 100f, 23f);
+ //objdata.FullID=user.AgentID;
+ byte[] pb = pos.GetBytes();
+ Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length);
+
+ return objdata;
+ }
#endregion
}
--
cgit v1.1